如何将 expectNew 用于具有泛型参数的构造函数?
How to use expectNew for constructor with generic parameter?
我需要将模拟对象注入到实例化新 MyClass
对象的方法中。
private MyClass<?> c;
public void myMethod(final String s) {
c = new MyClass<>(s);
c.callToMock();
}
我正在模拟的 class 有一个带有通用参数的构造函数。
public class MyClass<T> {
public MyClass(final T t) {
// do whatever
}
}
现在,在我的测试中,我为 class 创建了一个模拟。
当 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
对象。
不知道是匹配不到构造函数还是什么
如有任何帮助,我们将不胜感激。
您需要在测试 class 上添加一个 @PrepareForTest(MyTestedClass.class)
来准备测试 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");
}
}
我需要将模拟对象注入到实例化新 MyClass
对象的方法中。
private MyClass<?> c;
public void myMethod(final String s) {
c = new MyClass<>(s);
c.callToMock();
}
我正在模拟的 class 有一个带有通用参数的构造函数。
public class MyClass<T> {
public MyClass(final T t) {
// do whatever
}
}
现在,在我的测试中,我为 class 创建了一个模拟。
当 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
对象。
不知道是匹配不到构造函数还是什么
如有任何帮助,我们将不胜感激。
您需要在测试 class 上添加一个 @PrepareForTest(MyTestedClass.class)
来准备测试 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");
}
}