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

使用Mockito模拟接口时出现异常

萧麒
2023-03-14

我试图测试调用接口方法时是否传递了正确的值。我得到以下错误:

org.mockito.exceptions.misusing.未完成验证异常:缺少的方法调用验证(mock)在这里:-

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

此验证行上正在抛出错误:

Mockito。验证(回调)。onInitializeResult(“已初始化”)

我的接口类:

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个答案

岳允晨
2023-03-14

事实证明,mExample正在调用另一个未定义其方法的模拟实例。从另一个堆栈溢出post链接

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

因此,在问题中发布的案例中,异常是在

mExample.initialize(mContext, callback);

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

 类似资料: