以下は、WorkWithArrayList
のクラスの例です。このクラスには、2つのメソッドremoveFirstThree
とinsertData
があります。 removeFirstThree
メソッドは、引数としてList
を取得し、それを変更してデータベースに挿入します。 for
ループでは、List
の最初の要素を取り除いているかのようにこの変更を示し、すべての反復でデータを挿入します。メソッドが期待された引数(引数としてjava.util.List)で呼び出されたかどうかを確認する方法
実現したいのは、insertData
メソッドの引数を確認することです。しかしverify
メソッドのチェックは最初にverify(workWithArrayList).insertData(expected);
宣言のみです。
package test;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
public class MockitoVerifyWithArrayListTest {
private WorkWithArrayList workWithArrayList;
private List<Integer> actual;
private List<Integer> expected;
@Before
public void setUp() throws Exception {
workWithArrayList = spy(new WorkWithArrayList());
actual = new ArrayList<>();
actual.add(1);
actual.add(2);
actual.add(3);
actual.add(4);
actual.add(5);
actual.add(6);
expected = new ArrayList<>();
expected.add(1);
expected.add(2);
expected.add(3);
expected.add(4);
expected.add(5);
expected.add(6);
}
@Test
public void test() throws Exception {
workWithArrayList.removeFirstThree(actual);
expected.remove(0);
verify(workWithArrayList).insertData(expected);
expected.remove(0);
verify(workWithArrayList).insertData(expected);
expected.remove(0);
verify(workWithArrayList).insertData(expected);
}
public class WorkWithArrayList {
public void removeFirstThree(List<Integer> integers) {
for (int i = 0; i < 3; i++) {
integers.remove(0);
insertData(integers);
}
}
public void insertData(List<Integer> integers) {
}
}
}
:
Argument(s) are different! Wanted:
workWithArrayList.insertData(
[2, 3, 4, 5, 6]
);
-> at test.MockitoVerifyWithArrayListTest.test(MockitoVerifyWithArrayListTest.java:46)
Actual invocation has different arguments:
workWithArrayList.insertData(
[4, 5, 6]
);
-> at test.MockitoVerifyWithArrayListTest.test(MockitoVerifyWithArrayListTest.java:43)
編集:を私たちはMockito.verify
メソッドのjavadocを見れば、我々はこれを見ることができます:
引数が渡されます方法はequals()
を使用して比較されます。
しかし、変数actual
とexpected
は等しく、両方の最初の要素を削除しても同じ値を維持します。なぜこのテストが失敗するのか興味があります。