从附有调试器的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\");
    

要回复问题请先登录注册