2

我一直在为 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,因为GettableSetextends 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 团队提出问题?

4

0 回答 0