当前位置: 首页 > 知识库问答 >
问题:

Mockito模拟调用点指向Junit代码(ParentRunner)

邵兴怀
2023-03-14

以前从未见过这个问题——当使用verifyverifyInteractions而测试失败时,Mockito的职业列表指向JUnit代码,而不是应用程序代码:

[junit] No interactions wanted here:
[junit] -> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
[junit] But found this interaction on mock 'mockCounter':
[junit] -> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
[junit] ***
[junit] For your reference, here is the list of all invocations ([?] - means unverified).
[junit] 1. [?]-> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
[junit] 2. [?]-> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
[junit] 3. -> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
[junit]
[junit] junit.framework.AssertionFailedError:
[junit] No interactions wanted here:
[junit] But found this interaction on mock 'mockCounter':
[junit] ***
[junit] For your reference, here is the list of all invocations ([?] - means unverified).

我使用的是Mockito1.10.19和JUnit4.12。代码非常标准:

public class MyTest {
    @Rule
    public MockitoRule mockitoRule = MockitoJUnit.rule();

    @Mock
    private Counter mockCounter;

...

    @Test
    public void test() {
       ...
       verifyNoMoreInteractions(mockCounter);
    }

首先,我还使用了ExpectedException规则:

@Rule
public ExpectedException thrown = ExpectedException.none();

...这导致了其他问题,因为它将Mockito的验证失败捕获为意外异常:

[junit] No interactions wanted here:
[junit] -> at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
[junit] But found this interaction on mock 'mockCounter':
[junit] -> at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
[junit] ***
[junit] For your reference, here is the list of all invocations ([?] - means unverified).
[junit] 1. [?]-> at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
[junit] 2. [?]-> at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
[junit] 3. -> at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:239)
[junit]
[junit] junit.framework.AssertionFailedError:
[junit] No interactions wanted here:
[junit] But found this interaction on mock 'mockCounter':
[junit] ***
[junit] For your reference, here is the list of all invocations ([?] - means unverified).

我正在开发一个新的代码库,以前从未见过这个问题。似乎Mockito或JUnit清除堆栈跟踪的力度太大或是其他什么。。。

我可以在没有ExpectedException的情况下生活,但在未来测试失败的情况下,没有模拟调用点似乎很烦人。我该怎么解决这个问题?我看到了withSettings()的概念。verboseLogging()但我不想一直记录调用,除非测试失败。

共有1个答案

秦凯旋
2023-03-14

似乎罪魁祸首是MockitoRule。将其替换为注释。(这个) setUp()方法中的code>可以完全修复问题,即使使用了ExpectedException规则。

它已在Mockito2中修复。x但不向后移植到1。x

 类似资料:
  • 在我的实现类中,我有一个读写锁定义,如下所示, 我在一个名为的方法中使用它, 正如我所说的,是null,但是rwLock是初始化的。请解释Mockito是如何发生这种情况的。理想的方法是什么?

  • 基类 在派生类中不应用组合和其他函数。如果是,我是否应用了错误的模式?我应该如何处理相同的?

  • 问题内容: 我正在使用Selenium编写一些UI测试,并且使用Dojo工具箱具有一个JavaScript Tree控件。 我已经使用Dojo提供的示例为树的每个节点实现了一个上下文菜单,但是我需要Selenium测试来“调用”树节点上的右键,但是我无法使其正常工作。这些测试根本不会通过JavaScript模拟右键单击事件,并且不会显示上下文菜单。 是否有人在使用Dojo和Selenium调用上下

  • 问题内容: 我有四个让我们说A,B,C,D的类,每个类都从另一个调用方法。 现在我已经模拟了类A,并且想模拟使用嘲笑的方法 并希望在递归方法调用上获取“ foo” 应该回来 我试过了 when(a.getB()。getC()。getD())。thenReturn(“ foo”); 但是得到了nullPointerException 然后我尝试 doReturn(“ foo”)。when(a.get

  • 我有4个类让说A,B,C,D,每一个调用的方法从另一个。 现在我已经模拟了类A,并想使用mockito模拟一个方法 但得到nullPointerException 然后我试着 doReturn(“foo”).When(A.getb().getc().getd()); 但我不能一次就做到吗?如有任何帮助,我们将不胜感激。