在EasyMock上使用andReturn(T value)
和andStubReturn(T value)
有什么不同?
在andReturn()
无法达到相同效果的情况下,您会使用andStubReturn()
吗?
发布于 2010-09-21 05:21:42
在mock上使用存根返回进行方法调用,您希望发生这种情况,但在其他方面对此并不感兴趣。对于“常规”方法调用,您可以使用常规的返回。
考虑以下方法:
public void someMethod(String arg) {
if (logger.isDebugEnabled()) {
logger.debug("Calling doSomething() on service "
+ service.getName().hashCode());
}
service.postMessage("{" + arg + "}");
if (logger.isDebugEnabled()) {
logger.info("Finished calling doSomething() on service "
+ service.getName().hashCode());
}
}
...where service
是一个可模拟的字段。日志语句中的hashCode()
是人为设计的,但关键是您的mock需要响应对getName()
的任意数量的调用以避免NPE,而您不能以其他方式不关心它。
在为该方法编写基于EasyMock的单元测试时,您将andStubReturn()
对getName()
的调用,并使用普通的andReturn()
来调用postMessage(String)
。当您验证模拟对象时,它只会考虑后者,并且如果您更改了log4j配置,测试也不会中断。
https://stackoverflow.com/questions/3740376
复制相似问题