2
私はやや複雑な状況があり、対処方法がわかりません。プライベート変数マップを持つオブジェクトがあります(オブジェクトは既に初期化されています)。このクラスはマップ上で一連の操作を行います。ユニットテストMockito、スパイ、Mapオブジェクトのリフレクション
私は単体テストを書く必要があります。それはプライベート変数を取得し、それを模擬(またはスパイ)し、いくつかの操作を実行し、操作の順序を検証します。最善の方法は何ですか?
public class A{
private Map<String, String> map = new Map()<>;
public void method1(){
map.put("a", "A");
}
public void method2(){
if(map.size() > 0){
map.put("b", "B");
}
}
...
public class UnitTester{
@Test
public void test(){
A ainstance = new A();
Map<String,String> mock = mock(Map.class); //OR Map<String,String> mock = spy(Map.class);
Field f= A.class.getDeclaredField("map");
f.setAccessible(true);
f.set(ainstance, mock);
ainstance.method1();
ainstance.method2();
InOrder inOrder = inOrder(mock);
inOrder.verify(mock, times(2), put(anyString(), anyString())); //Does not work
}
map.put
地図には何も追加されません。これが反射オブジェクトなのか、それとも別の原因があるのか分かりません。
することができます '@ MapインタフェースSpy'ではないとして。 '@ Spy'を実行する前に、mapSpyの具体的な型を宣言しなければなりません。 –