【发布时间】:2014-09-21 00:04:51
【问题描述】:
我需要一个在测试期间调用时返回什么都不做的方法,拥有该方法的类实例被实现为间谍。
我知道 doNothing() 方法仅适用于 void 方法。有没有办法通过返回某些东西的方法获得相同的行为?
谢谢!
【问题讨论】:
标签: java unit-testing junit mockito powermock
我需要一个在测试期间调用时返回什么都不做的方法,拥有该方法的类实例被实现为间谍。
我知道 doNothing() 方法仅适用于 void 方法。有没有办法通过返回某些东西的方法获得相同的行为?
谢谢!
【问题讨论】:
标签: java unit-testing junit mockito powermock
使用when(spy.myMethod()).thenReturn(null)。这将阻止间谍调用包装的实例。您必须告诉 Mockito 为返回某些内容的方法返回什么。 mock 的默认行为是返回 null。 spy 的默认行为是调用包装对象。当您 stub spy 中的方法时,它会阻止对包装对象的调用并执行指定的行为。
根据Spy的文件,你也可以做doReturn(null).when(spy).myMethod();
【讨论】:
when(spy.myMethod()).thenReturn(null) 对间谍不起作用(在一般情况下,可能在特定情况下),因为此时将执行该方法的实际实现。一般规则是必须始终使用doXyz().when(spy).method() 语法对间谍进行存根,以防止意外执行实际代码。