EasyMock验证模拟对象的参数

时间:2013-01-25 09:28:49

标签: java parameters easymock verify

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

1 个答案:

答案 0 :(得分:1)

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

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

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