我想验证是否正确映射了模拟对象的参数(在方法调用之前有映射)。 我创建了两个对象,其中一个具有预期的值。 我希望假的失败,但不知何故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
提前致谢!
编辑:找到答案(使用捕获来记录参数并通过断言测试值)
Capture paramter = new Capitre(); 期望(serviceBeingMocked(EasyMock.capture(参数)));
。的assertEquals(parameter.getValue()getWhatever()等于(correct.getWhatever());
答案 0 :(得分:1)
如果我理解正确,这个测试是一个测试敌人methodname()
。并且您想测试一下,给定一个源,映射器创建了正确的MyClass参数,并传递给serviceBeingMocked.doSomething()
。
事实上,methodname()
的单元测试实际上测试了mapper.map()
方法。那是错的。您应该为mapper.map()
编写一个单元测试来测试它。一旦确保mapper.map()
按预期工作,就可以通过模拟methodname()
方法来测试mapper.map()
,并验证此模拟方法的结果是否传递给模拟服务(尽管这个测试不会增加很多价值。)
要完成,如果您真的想按照自己的方式检查传递给serviceBeingMocked()
的值,那么您应该使用capture。