junit - 需要在要测试的类的构造函数中模拟对象的创建

标签 junit mocking mockito powermock

我正在尝试测试一个在构造函数中创建新对象的类。我正在使用 PowerMock 和 Mockito。

public ClassNeedToTest() throws Exception {

    String targetCategory = "somevalue";
    String targetService = "somevalue";
    invoker = new ServiceInvoker(targetCategory, targetService); // throws Exception
}

对于上面给出的代码,我试图创建一个 ClassNeedToTest 的实例。测试该类的不同方法。我无法创建对象,因为 ServiceInvoker创建正在抛出异常。 ServiceInvoker类是第三方类。
有什么方法可以模拟 ServiceInvoker,以便在测试类尝试创建 ClassNeedToTest 时我可以得到ServiceInvoker的mock对象而不是真正调用 ServiceInvoker 的构造函数.

在我的测试类中,我只是创建了一个 ClassNeedToTest 的新实例:
ClassNeedToTest obj = new ClassNeedToTest();

最佳答案

我找到了同样的答案。
如果你正确地按照下面给出的步骤,你可以模拟对象。

第1步。
- 添加注释以准备测试类。

@PrepareForTest({ ServiceInvoker.class, ClassNeedToTest.class})

第2步。
- 模拟类。
serviceInvokerMck = Mockito.mock(ServiceInvoker.class);

第 3 步。
调用 new 运算符时,使用以下方法模拟对象
PowerMockito.whenNew(ServiceInvoker.class).withAnyArguments().thenReturn(serviceInvokerMck);

我没有做的是添加类 ClassNeedToTestPrepareForTest认为应该在那里添加唯一需要模拟的类的注释。

关于junit - 需要在要测试的类的构造函数中模拟对象的创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22216467/

相关文章:

c# - 使用我无法修改的类的私有(private)构造函数模拟对象

java - 如何模拟服务并测试 POST Controller 方法

java - 如何覆盖 Mockito 中的 setter 方法?

java - Ubuntu 安装 Junit

java - Xqual 和 Junit : parameters?

像 Eclipse 中的 JUnit 一样工作的 C# 测试框架?

grails - 从grails test-app中排除软件包?

java - 模拟 void 方法返回空指针异常

java - 使用 Mockito 多次调用具有相同参数的相同方法

java - 使用mockito创建单元测试