1

我想验证一个模拟对象的参数是否正确映射(在方法调用之前有一个映射)。我创建了两个对象,其中一个具有预期值。我希望 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(); 期望(serviceBeingMocked(EasyMock.capture(参数)));

assertEquals(parameter.getValue().getWhatever().equals(正确.getWhatever());

4

1 回答 1

1

如果我理解正确的话,这个测试就是一个测试敌人methodname()。你想测试一下,给定一个源,正确的 MyClass 参数是由映射器创建的,并传递给serviceBeingMocked.doSomething().

所以实际上,您的单元测试methodname()实际上测试了该mapper.map()方法。那是错误的。您应该编写一个单元测试mapper.map()来测试它。一旦确保mapper.map()按预期工作,您可以methodname()通过模拟该mapper.map()方法进行测试,并验证此模拟方法的结果是否已传递给模拟服务(尽管此测试不会增加太多价值)。

为了完整起见,如果您真的想按照自己的方式检查传递给 的值serviceBeingMocked(),那么您应该使用capture

于 2013-01-25T10:11:44.977 回答