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

Var*_*run 5 junit mocking mockito powermock

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

public ClassNeedToTest() throws Exception {

    String targetCategory = "somevalue";
    String targetService = "somevalue";
    invoker = new ServiceInvoker(targetCategory, targetService); // throws Exception
}
Run Code Online (Sandbox Code Playgroud)

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

在我的测试类中,我只是创建了一个ClassNeedToTest的新实例:

ClassNeedToTest obj = new ClassNeedToTest();
Run Code Online (Sandbox Code Playgroud)

Var*_*run 4

我找到了同样的答案。如果正确遵循下面给出的步骤,您可以模拟对象。

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

@PrepareForTest({ ServiceInvoker.class, ClassNeedToTest.class})
Run Code Online (Sandbox Code Playgroud)

步骤 2. - 模拟课堂。

serviceInvokerMck = Mockito.mock(ServiceInvoker.class);
Run Code Online (Sandbox Code Playgroud)

步骤 3. 在调用 new 运算符时使用以下方法来模拟对象

PowerMockito.whenNew(ServiceInvoker.class).withAnyArguments().thenReturn(serviceInvokerMck);
Run Code Online (Sandbox Code Playgroud)

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