如何将期望新用于带有泛型参数的构造函数?



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

private MyClass<?> c;
public void myMethod(final String s) {
c = new MyClass<>(s);
c.callToMock();
}

我正在模拟的类有一个带有泛型参数的构造函数。

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

现在,在我的测试中,我为班级创建了一个模拟。 调用new时,它应该注入该模拟。

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

最新更新