Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用带有泛型参数的expectNew for构造函数?_Java_Powermock_Easymock - Fatal编程技术网

Java 如何使用带有泛型参数的expectNew for构造函数?

Java 如何使用带有泛型参数的expectNew for构造函数?,java,powermock,easymock,Java,Powermock,Easymock,我需要将一个模拟对象注入到一个实例化新MyClass对象的方法中 private MyClass<?> c; public void myMethod(final String s) { c = new MyClass<>(s); c.callToMock(); } 当我运行测试时,它不会捕获新调用,只是实例化一个实际的MyClass对象。 我不知道它是否不能匹配构造函数或什么 非常感谢您的帮助。您需要在测试类上添加一个@preparefortestm

我需要将一个模拟对象注入到一个实例化新MyClass对象的方法中

private MyClass<?> c;

public void myMethod(final String s) {

   c = new MyClass<>(s);

   c.callToMock();
}
当我运行测试时,它不会捕获新调用,只是实例化一个实际的MyClass对象。 我不知道它是否不能匹配构造函数或什么

非常感谢您的帮助。

您需要在测试类上添加一个@preparefortestmytedclass.class来准备测试类以模拟新的

下面是一个完全有效的测试:

@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");
    }
}

完全正确。我在发布这篇文章后很快就明白了这一点,哈哈。当然,这是最简单的解决方案
@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();

      ...

   }
@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");
    }
}