java - PowerMock whenNew 没有@PrepareForTest?

标签 java unit-testing testing mockito powermock

这是我的情况,我有 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 类的一个实例,并在 A 实例化 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) 语句测试的代码。我的公司重视准确的代码测试覆盖率。

我的问题:是否有另一种方法可以在不使用@PrepareForTest 语句的情况下为 A 实例化 B?

非常感谢!

最佳答案

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

关于java - PowerMock whenNew 没有@PrepareForTest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22044284/

相关文章:

testing - Karma + AngularJS 场景测试运行器和表单的问题

unit-testing - 单元测试如何测试任何东西?

c# - NUnit 理论有一个异常(exception)

java - 为什么 EntityManager 关闭了?

java - 如何设置您的 Android 应用程序,以便在我上传新的 APK 时它会在用户的手机上自动更新?

ios - XCTestExpectation 在单元测试中的正确时间/位置完成方法调用?

c# - 无法加载测试程序集 '*.dll'。错误详细信息 : Could not find file *. dll'

java - 具有字节数组键和字符串值的 HashMap - containsKey() 函数不起作用

java - 从Linux centos 5.3运行Eclipse,菜单中没有项目,命令行错误(eclipse :31981): Gtk-WARNING

ruby-on-rails - 如何有选择地使Rails 3弃用警告静音?