当我尝试通过传递强制转换的值来模拟重载的方法时,出现以下错误。
例如为了嘲笑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
,则需要在所有人都无法告诉您之前将其发布。