EasyMock测试用例失败说方法调用不正确

时间:2015-06-16 13:21:14

标签: unit-testing junit easymock

有人知道下面显示的EasyMock测试用例中5b40c281和78a1d1f4的数字是什么意思?

它们本质上是指向两个不同PdlPrintJob实例的指针吗?

有谁知道为什么会发生这种失败?

在主代码中,构造了PdlPrintJob(使用新的PdlPrintJob())并作为参数传递给方法printer.executePrintJob()。

在测试用例中,构造了PdlPrintJob(使用新的PdlPrintJob())并作为参数传递给mockPrinter.executePrintJob()。

感谢您的任何建议,

祝你好运

詹姆斯

junit.framework.AssertionFailedError:
Unexpected method call executePrintJob(com.canon.cel.meap.jobs.PdlPrintJob@5b40c281, EasyMock for interface com.canon.meap.security.AccessControlToken):
executePrintJob(com.canon.cel.meap.jobs.PdlPrintJob@5b40c281, EasyMock for interface com.canon.meap.security.AccessControlToken): expected: 0, actual: 1
executePrintJob(com.canon.cel.meap.jobs.PdlPrintJob@78a1d1f4, EasyMock for interface com.canon.meap.security.AccessControlToken): expected: 1, actual: 0

1 个答案:

答案 0 :(得分:1)

因为你在测试类中做过类似的事情。

EasyMock.expect(executePrintJob(new PdlPrintJob(),....))'

但实际上它应该是一个你应该作为参数传递的mockObject。

你需要做这样的事情

PdlPrintJob pdlPrintJob=Easymock.createNiceMock(PdlPrintJob.class);
Powermock.expectNew(PdlPrintJob).andReturn(pdlPrintJob).anyTimes(); //this will return the mocked instance of PDlPrintJob class wherever 'new' operator is used for this class
EasyMock.expect(executePrintJob(pdlPrintJob,.....)).andReturn(anythingYouWantToReturn).anyTimes(); // have added '.....' in case there are other parameters to this method
EasyMock.replay(pdlPrintJob);
Powermock.replayAll();

你遇到了这个问题,因为Easymock是一个严格的模拟框架,你曾要求它只期望特定对象类型的特定方法(its like tightly binding method expectation to a single object),并且在执行期间使用新的运算符时方法期望失败作为对象参数与Easymock的期望不符,导致此异常。

我总是喜欢为方法期望做这样的事情

如果我要测试的方法是

public String compress(String str, Integer intr, double ch){}

我希望easymock中的这个方法如下:

EasyMock.expect(compress(EasyMock.anyObject(String.class),EasyMock.anyObject(Integer.class),EasyMock.anyDouble())).andReturn("Done compressing").anyTimes();

所以通过这种方法,我的方法期望适用于在测试用例执行期间传递给我的compress()方法的任何有效参数。

希望有所帮助!

祝你好运!