我一直在为Mockito发生的事情摸不着头脑 .
我有这个名为 ExamineFilter
的类,到目前为止还没有参数化 . 150个测试与这个 class 和其他所有通过罚款 . 很多嘲笑 .
然后我改变了 ExamineFilter
public class ExamineFilter extends FilteringTokenFilter implements GettableSet<UniqueSequence> {
至
public class ExamineFilter<V extends UniqueSequenceInterface> extends FilteringTokenFilter implements GettableSet<V> {
现在,当我有一个 ExamineFilter
的 Spy ,然后去
spyExamineFilter.add( ... )
...这个方法 add
是 not called 但代码继续 . 而之前被称为 .
这里的 add
方法实际上来自 Set
,因为 GettableSet
扩展 Set
, Set.add
的签名是
public boolean add( V element ){ ...
...每次在 Spy 上调用此方法时,它返回 false
...这似乎是模拟在这样的 boolean
-returning方法被嘲笑时会做的事情 .
我还检查了这确实是发生了什么,如果不是使用 ExamineFilter<...>
的 Spy 而不是使用 ExamineFilter<...>
的 Spy 会发生什么:事实上, add
被称为正常 .
这个Mockito行为是否有已知的和有记录的解释?显然,我现在正在考虑使用变通方法重写一些现在已经变红的测试......
Addendum
顺便说一下,对于任何有兴趣的人,我尝试了“callRealMethod”的两种“风味”:
doCallRealMethod().when( spyExamineFilter ).add( any() ); // results in immediate call (i.e. at this line!) with null argument to add()
when( spyExamineFilter.add( any())).thenCallRealMethod(); // results in mock "add" call when add() invoked
when( spyExamineFilter.add( any( UniqueSequence.class ))).thenCallRealMethod(); // results in mock "add" call when add() invoked
when( spyExamineFilter.add( notNull() )).thenCallRealMethod(); // results in mock "add" call when add() invoked
......如果有任何传球的Mockito高级牧师这样做:上述任何一种情况都表明异常行为可能实际上需要提出Mockito团队的问题吗?