这是我的情况,我有2个非常简单的类:

public class B {

    public void doSomething(){
        System.out.println("doSomething B reached");
    }
}

和:
public class A {

public void doSomething(){
    B b = new B();
    b.doSomething();
    System.out.println("doSomething A reached");
}

}

我想用Mockito测试类A的doSomething方法。因此,我想模拟类B的实例,并在实例化类B时将其提供给A。出于隔离的原因,我根本不希望达到b.doSomething()。

我知道我可以通过创建以下单元测试来实现此行为:
@RunWith(PowerMockRunner.class)
public class TestA {

    @Test
    @PrepareForTest(A.class)
    public void testDoSomethingOfA() throws Exception{
        A a = PowerMockito.spy(new A());
        B b = PowerMockito.mock(B.class);
        PowerMockito.whenNew(B.class).withNoArguments().thenReturn(b);
        a.doSomething();
    }
}

结果输出:
doSomething A reached

如此工作!但是,我现在的问题是,我们使用Jococo插件进行测试。 Jococo不涵盖使用@PrepareForTest(A.class)语句测试过的代码。我的公司重视准确的代码测试范围。

我的问题:是否有另一种方法可以给A实例化B而不必使用@PrepareForTest语句?

提前谢谢了!

最佳答案

要回答我自己的问题,是的,请使用代理:https://github.com/jayway/powermock/wiki/PowerMockAgent

07-26 03:26