【问题标题】:Exception when mocking Interface with Mockito使用 Mockito 模拟接口时出现异常
【发布时间】:2018-12-11 22:15:21
【问题描述】:

我正在尝试测试是否调用了接口方法并传入了确切的值。我收到以下错误:

org.mockito.exceptions.misusing.UnfinishedVerificationException:此处缺少验证(模拟)的方法调用: -> 在 com.example.app.initialize(example.java:136)

正确验证示例: 验证(模拟).doSomething()

此验证行正在抛出错误:

Mockito.verify(callback).onInitializeResult("initialized");

我的界面类:

public interface InitCallback {
/**
 * Returns whether or not the app was initialized.     .
 */
    void onInitializeResult(String result);
}

我的单元测试:

@Test
    public void initializationTest(){
        InitCallback callback = Mockito.spy(new InitCallback() {
            @Override
            public void onInitializeResult(String result) {

            }
        });
        mExample.initialize(mContext, callback);
        Mockito.verify(callback).onInitializeResult("initialized");
    }

我还尝试将回调模拟替换为:

InitCallback callback = Mockito.mock(InitCallback.class);
Mockito.doNothing().when(callback).onInitializeResult(Mockito.anyString());

但是我仍然遇到同样的错误。该接口只有 1 个方法,它不是最终的。有什么想法吗?

【问题讨论】:

    标签: java android unit-testing mocking mockito


    【解决方案1】:

    事实证明,mExample 正在调用另一个未定义方法的模拟实例。来自另一个 Stack Overflow 帖子 Link

    如果您滥用 Mockito,它会引发异常,以便您知道您的 测试编写正确。 问题是 Mockito 做到了 下次使用框架时进行验证(例如,下次验证时, 存根,调用模拟等)。但即使可能抛出异常 在下一个测试中,异常消息包含一个可导航的堆栈 带有缺陷位置的微量元素。因此,您可以单击并 找到 Mockito 被滥用的地方。

    所以在问题中发布的情况下,异常是在

    中生成的
    mExample.initialize(mContext, callback);
    

    但在下次调用 verify 之前不会抛出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多