我一直在为 Mockito 刚刚发生的事情挠头。
我有这个类,称为ExamineFilter
,到目前为止还没有参数化。150 多个测试与这门课和其他所有测试都通过了。很多嘲讽。
然后我ExamineFilter
从
public class ExamineFilter extends FilteringTokenFilter implements GettableSet<UniqueSequence> {
至
public class ExamineFilter<V extends UniqueSequenceInterface> extends FilteringTokenFilter implements GettableSet<V> {
现在,当我有一个间谍ExamineFilter
,然后去
spyExamineFilter.add( ... )
...这个方法add
没有被调用,但代码继续。而它之前被调用。
这里的add
方法其实是 from Set
,因为GettableSet
extends Set
,而 的签名Set.add
是
public boolean add( V element ){ ...
...每次在它返回的 spy 上调用此方法时...如果模拟这样的-returning 方法,false
这似乎是模拟会做的事情。boolean
我还检查了这确实是正在发生的事情,通过找出如果ExamineFilter<...>
我使用真实的ExamineFilter<...>
: 而不是使用间谍会发生什么,并且确实add
被称为正常。
对于这种 Mockito 行为,是否有已知且有记录的解释?显然,我现在正试图考虑解决方法来重写少数现在因此变红的测试......
附录
顺便说一句,对于任何感兴趣的人,我都尝试了“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 团队提出问题?