java - 如何使用expectNew作为带有泛型参数的构造函数?

标签 java powermock easymock

我需要将模拟对象注入(inject)到实例化新 MyClass 对象的方法中。

private MyClass<?> c;

public void myMethod(final String s) {

   c = new MyClass<>(s);

   c.callToMock();
}

我正在 mock 的类有一个带有通用参数的构造函数。

public class MyClass<T> {

   public MyClass(final T t) {
      // do whatever
   }
}

现在,在我的测试中,我已经为该类创建了一个模拟。 当调用 new 时,它应该注入(inject)该模拟。

@RunWith (PowerMockRunner.class)
public class TestClass {

   @SuppressWarnings ("unchecked")
   public void myMethodTest() throws Exception {

      MyClass<String> myMock = (MyClass<String>) EasyMock.createMock(MyClass.class);

      PowerMock.expectNew(MyClass.class, "my argument")
               .andReturn(myMock);
      myMock.callToMock();
      EasyMock.expectLastCall().once();

      EasyMock.replay(myMock);
      PowerMock.replayAll();

      ...

   }

当我运行测试时,它不会捕获 new 调用,而只是实例化一个实际的 MyClass 对象。 不知道是无法匹配构造函数还是什么。

如有任何帮助,我们将不胜感激,谢谢。

最佳答案

您需要在测试类上添加@PrepareForTest(MyTestedClass.class),以准备测试类来模拟new

这是一个完整的工作测试:

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyTestedClass.class)
public class TestClass {

    @Test
    @SuppressWarnings("unchecked")
    public void myMethodTest() throws Exception {

        MyClass<String> myMock = (MyClass<String>) EasyMock.createMock(MyClass.class);
        myMock.callToMock();

        PowerMock.expectNew(MyClass.class, "my argument")
                .andReturn(myMock);

        EasyMock.replay(myMock);
        PowerMock.replayAll();

        MyTestedClass tested = new MyTestedClass();
        tested.myMethod("my argument");
    }
}

关于java - 如何使用expectNew作为带有泛型参数的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50142247/

相关文章:

java - 这是资源泄漏还是误报?

java - Swagger 不生成 REST 文档

java - 使用 powermock 测试构造函数

java - 匹配项目值(value)数量以尽可能接近价格点的算法(JAVA)

java - 使用 TestExecutionListener 时 Spring 测试注入(inject)不起作用

java - Java 中的 Mockito 'Misplaced argument detected here'

java - PowerMockito UnfinishedStubbingException

c# - "static reflection"在 Java 中如何工作? (例如在 mockito 或 easymock 中)

java - 创建一个调用构造函数的模拟

java - EasyMock:获取 EasyMock.anyObject() 的真实参数值?