有人知道下面显示的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
答案 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()方法的任何有效参数。
希望有所帮助!
祝你好运!