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

Mockito错误:“需要但未调用:..然而,与这个模拟“还有其他的交互作用

伊俊能
2023-03-14

当我试图通过传递强制转换的值来模拟重载的方法时,我得到了以下错误。

例如,为了模拟abcclass.logwarn(记录器日志、字符串、字符串描述、可抛e);

我正在做

`ABCClass.logWarn(null,WarningString, description, (Throwable)null); 
...\\ The rest of the methods are standard...
verify(event).setStatus((Throwable)null);//**Line 76**

但是当我运行测试用例时,我会得到以下错误

  ABCClassTest.testLogWarn:76 
    Wanted but not invoked:
    MockEvent.setStatus(null);
    -> at com.path.ABCClassTest.testLogWarn(ABCClassTest.java:76)

However, there were other interactions with this mock:.....

为什么要调用setstatus(null),甚至在专门调用setstatus((Throwable)null);之后?

附加详细信息

logWarn的定义

private static void logWarn(String eventType, String eventName, String errMsg, Throwable e) {

        AnEvent event = AnEventFactory.create(eventType);
        event.setName(eventName);
        if(e!=null)
            event.setStatus(e);//so this is never called if the throwable is null.
    //How do I modify the verify behavior?
        /*
                   Bleh */


        event.completed();
    }

共有1个答案

江温书
2023-03-14

强制转换不会更改变量引用的对象。它只是让编译器在你以与其类型不匹配的方式使用变量时不会抱怨。因此,您实际上是在verify之后将null传递到setstatus中。

当然,如果您想知道为什么setstatus实际上没有被您测试的代码调用,那么您需要在任何人告诉您之前发布它。

 类似资料: