(免责声明 – EasyMock newb)
根据文档(和this post),如果我想使用EasyMock生成存根对象,我应该使用EasyMock.createNiceMock(). “漂亮的模拟”实际上是一个存根 – 即一个不参与验证的对象,只返回值.
但是,在第二个foo.translate()行中,以下代码段失败,并且出现IllegalStateException(“前一个方法的缺少行为定义”).
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)).
编辑 – 我注意到,在附加调试器时,我几乎总是会收到这些错误,但从未附加调试器时.知道怎么可能有关系吗?
解决方法:
补充Jeff的答案.
从EasyMock的方法createNiceMock javadoc:
Creates a mock object that implements the given interface, order checking
is disabled by default, and the mock object will return0
,
null or false for unexpected invocations.
此方法创建的模拟对象不需要任何配置(预期调用).你只需要创建它并“重放它”.例:
ComplicatedObject stub = EasyMock.createNiceMock();
replay(stub);
在创建的存根上允许任何方法调用(它不会抛出异常),并且它们将始终返回默认值(0,null或false).如果您设置了特定的调用期望,那么您将必须配置它的返回值,否则您将收到错误(这是您的情况).
如果你想限制哪些方法可以执行(如果调用一个意外的方法使测试失败),那么我担心你将不得不创建一个常规模拟,设置每个调用期望和每个的返回值那些.
标签:java,mocking,easymock 来源: https://codeday.me/bug/20190626/1295789.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。