如何解决从附有调试器的EasyMock的“漂亮的模拟”中获取异常
|| (免责声明-EasyMock newb) 根据文档(和本文),如果我想使用EasyMock生成存根对象,则应使用EasyMock.createNiceMock()
。 \“ nice模拟\”实际上是一个存根-即不参与验证的对象,仅返回值。
但是,下面的代码片段对我来说失败,在第二行foo.translate()
行上带有IllegalStateException(\"missing behavior deFinition for the preceding method\")
。
Foo foo = EasyMock.createNiceMock(Foo.class);
EasyMock.replay(foo); // added this line
foo.translate(\"a\",\"b\");
foo.translate(\"a\",\"b\"); // only the second calls throws an exception
任何人都可以解释一下,或者告诉我如何使用EasyMock创建零冗长(o(number_of_exercised_mock_methods))的存根。
编辑-我已经注意到,几乎总是在连接调试器时收到这些错误,而在未附加调试器时从未得到。任何想法可能有什么关系吗?
解决方法
补充杰夫的答案。
通过EasyMock的方法createNiceMock javadoc:
创建一个实现给定接口的模拟对象,进行顺序检查
默认情况下处于禁用状态,并且模拟对象将返回
0
,
对于意外调用,为null或false。
通过此方法创建的模拟对象不需要任何配置(预期的调用)。您只需创建它并“重播”。例:
ComplicatedObject stub = EasyMock.createNiceMock();
replay(stub);
在创建的存根上允许进行任何方法调用(不会引发Exception),并且它们将始终返回默认值(0,null或false)。如果您设置了特定的调用期望,则必须配置它的返回值,否则会得到一个错误(这是您的情况)。
如果您想限制可以执行的方法(如果调用了意外方法,会使测试失败),恐怕您将不得不创建常规的模拟程序,设置每个调用的期望值和返回值每个。
, 如果您的翻译方法返回一个值,则需要设置一个期望值。
expect(foo.translate(\"a\",\"b\")).andStubReturn(retVal);
, 您需要致电EasyMock.replay(foo)
。在执行此操作之前,您的模拟对象处于“记录状态”。从EasyMock文档中:
处于记录状态(调用之前
重播),则模拟对象不会
表现像模拟对象,但它
记录方法调用。打电话后
重播,其行为类似于模拟对象,
检查是否期望的方法
呼叫真的完成了。
如果要创建存根对象,请先调用createNiceMock
,再调用replay
:
Foo foo = EasyMock.createNiceMock(Foo.class);
EasyMock.replay(foo);
foo.translate(\"a\",\"b\");
foo.translate(\"a\",\"b\");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。