微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从附有调试器的EasyMock的“漂亮的模拟”中获取异常

如何解决从附有调试器的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 举报,一经查实,本站将立刻删除。