Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Mockito捕获中间值?_Java_Unit Testing_Mockito - Fatal编程技术网

Java 如何使用Mockito捕获中间值?

Java 如何使用Mockito捕获中间值?,java,unit-testing,mockito,Java,Unit Testing,Mockito,问题很简单 // Class Under Test list.add(1); dependency.handleList(list); list.clear(); list.add(2); dependency.handleList(list); //Test Code verify(mockDepenency, times(2)).handleList(argumentCaptor.capture()); List<Collection<Integer>> list

问题很简单

// Class Under Test
list.add(1);
dependency.handleList(list);
list.clear();
list.add(2);
dependency.handleList(list);

//Test Code
verify(mockDepenency, times(2)).handleList(argumentCaptor.capture());
List<Collection<Integer>> list = argumentCaptor.getAllValues();
assertEquals(1, list.get(0).get(0)); // fails value is 2
//测试中的类
增加第(1)款;
依赖项列表(列表);
list.clear();
增加(2);
依赖项列表(列表);
//测试代码
验证(mockDependency,times(2)).handleList(argumentCaptor.capture());
List List=argumentCaptor.getAllValues();
assertEquals(1,list.get(0.get(0));//失败值为2
原因似乎与Mockito捕捉论点的方式有关。也就是说,它通过引用捕获所有参数。这似乎与我有关


理想情况下,我希望能够在捕获时指定一个拷贝/克隆,但我看不到这样做的方法。是否有我缺少的替代方案?

如果您向测试中的类提供
列表
,您可能也可以模拟该类并对其执行验证,例如:

final List<Integer> list = spy(List.class);

... act...

final InOrder inOrder = inOrder(list, mockDependency);

inOrder.verify(list).add(1);
inOrder.verify(mockDependency).handleList(list);
inOrder.verify(list).clear();
inOrder.verify(mockDependency).handleList(list);
inOrder.verify(list).add(2);
final List List=spy(List.class);
... 表演。。。
final inoorder inoorder=inoorder(列表,mockDependency);
顺序验证(列表)。添加(1);
顺序验证(mockDependency).handleList(列表);
inOrder.verify(list.clear();
顺序验证(mockDependency).handleList(列表);
顺序验证(列表)。添加(2);
然而,我不确定这种方法在您的实际测试中是否有效


编辑:根据whaley的评论,从
mock
更改为
spy

我认为您链接的问题比您的示例更容易理解(无意冒犯)。就你的例子来说,你能不能在
依赖项.handList
调用之间进行验证?@tieTYT:不能,因为handleList是在我测试的类中调用的(因此类用户测试注释),所以在我实际尝试测试的类中不会有mockito或juint调用。就我个人而言,我会在这里监视一个实际的List实现,而不是List.class的模拟,这样add/clear就可以正常使用,而无需编写when语句来清除这些语句。@Jonathan:List实际上是在方法内部构建的,但是power mockito可以拦截
new
调用+我可能会接受这一点,但我会把这个问题留一段时间,看看是否有人咬人。