【发布时间】:2018-12-20 12:12:37
【问题描述】:
Mockito ArgumentCaptor 似乎颠覆了泛型,如以下伪代码所示。
public Class SomeClass{
public void someMethod(Object msg){
// do whatever
}
}
执行单元测试,其中传递了 SomeClass 的模拟。 在模拟上进行以下方法调用。
someClass.someMethod(instanceA)
someClass.someMethod(instanceB) // where A & B are different classes
单元测试然后执行以下操作 >
ArgumentCaptor<A> argumentCaptorA = ArgumentCaptor.forClass(A.class);
ArgumentCaptor<B> argumentCaptorB = ArgumentCaptor.forClass(B.class);
Mockito.verify(someClass, times(2)).someMethod(argumentCaptorA.capture());
Mockito.verify(someClass, times(2)).someMethod(argumentCaptorB.capture());
问题来了>
List<A> listA = argumentCaptorA.getAllValues();
List<B> listB = argumentCaptorB.getAllValues();
listA 和 listB 的大小均为 2,同时包含 instanceA 和 instanceB。
这是为什么?是因为在运行时 instanceA 和 instanceB 参数在传递给 someClass 时变为 Object 并且 Mockito 没有针对 ArgumentCaptors 的类型正确地检查 Object 吗?
我预计泛型将确保 listA 将包含 instanceA 而 listB 将包含 instanceB。
【问题讨论】:
-
似乎这个问题已经包含在这个问题的正文中> stackoverflow.com/questions/17204453/…
标签: java unit-testing generics mockito