我想验证模拟对象的参数是否正确映射(在方法调用之前有一个映射)。我已经创建了两个对象,其中一个具有预期的值。我预计false会失败,但不知何故easymock没有验证参数是否包含期望值。我怎么才能修复它呢?
真正的类做:
public SomeObject methodname() {
MyClass parameter = mapper.map(source,Dest.class);
serviceBeingMocked.doSomething(parameter); //<-- want to verify this parameter
}测试
MyClass correct = ...;
correct.setA=a;
correct.setB=b;
expect(serviceBeingMocked(correct)).andReturn(iDontCare); //this should work
MyClass false = ...;
false.setA=eeeeeeeeeee;
false.setB=ffffffffff;
expect(serviceBeingMocked(false)).andReturn(iDontCare); // this test should fail提前感谢!
编辑:找到答案(使用捕获记录参数并通过断言测试值)
捕获参数= new Capitre();expect(serviceBeingMocked(EasyMock.capture(parameter)));
assertEquals(parameter.getValue().getWhatever().equals(correct.getWhatever());
发布于 2013-01-25 18:11:45
如果我没理解错的话,这个测试是对methodname()的测试。您想测试一下,在给定一个源的情况下,映射器是否创建了正确的MyClass参数,并将其传递给serviceBeingMocked.doSomething()。
因此,实际上,您的methodname()单元测试实际上测试了mapper.map()方法。这是错误的。您应该为mapper.map()编写一个单元测试来测试这一点。确保mapper.map()按预期工作后,您可以通过模拟mapper.map()方法来测试methodname(),并验证这个模拟方法的结果是否传递给了模拟服务(尽管此测试不会增加太多价值)。
要完成此操作,如果您确实希望检查传递给serviceBeingMocked()的值,那么您应该使用capture。
https://stackoverflow.com/questions/14518885
复制相似问题