获取模拟的方法但未正确返回值

时间:2014-08-26 05:55:00

标签: java unit-testing junit4 powermock easymock

我正在尝试对我的班级进行单元测试 这看起来像是: -

   class A{
       private void method1(){
          B b=new B();
          C c=b.method2();
          if(c!=null){
             ...
             ...
          }
       }
}

我想在B类中模拟“method2()”。 我知道我们需要有一个B()的模拟对象,这样每当我们调用一个方法时就会发生模拟。 这就是我试过的

A aMock=Easymock.createNiceMock(A.class);
B bMock=Easymock.createNiceMock(B.class);
Powermock.expectNew(B.class).andReturn(bMock).anyTimes();
Easymock.expect(bMock.method2()).andReturn(new C()).anyTimes();
//have done all the replays and verifies

并使用aMock.method1()调用它, 现在主要的问题是method2被模拟(即method2()的主体没有被执行)但是我无法接收C的对象作为响应。

我的测试场景是: -

我想测试A类的method1(),它反过来调用B类的method2(),但我不希望它执行它的代码(方法2()),因为它是一个DB调用,我也需要方法2()返回的C的对象,所以我使用mocking来实现这一点。

1 个答案:

答案 0 :(得分:0)

如果您要测试类method1()的{​​{1}},那么您不应该创建A的模拟。这意味着你不应该做A

对于您的测试场景,测试类似于:

A aMock=Easymock.createNiceMock(A.class);

您可以按照文档here

进行操作