当我尝试通过传递强制转换的值来模拟重载的方法时,出现以下错误。

例如为了嘲笑
ABCClass.logWarn(Logger log,String , String description, Throwable 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();
    }

最佳答案

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

当然,如果您要问为什么所测试的代码实际上并未调用setStatus,则需要在所有人都无法告诉您之前将其发布。

08-28 22:41