java - 如何将 expectNew 用于具有泛型参数的构造函数?
问题描述
我需要将模拟对象注入到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");
}
}
推荐阅读
- arrays - VideoFram 帧到字节数组
- php - 资源解释为样式表,但使用 MIME 类型 text/html 传输:"
" - for-loop - For循环复制粘贴文件夹并使用增量重命名它
- arrays - 如果 textField 有特定的文本 swift 从 firestore 检索数据
- vba - 调用子过程的错误处理表单 - MS Access VBA
- node.js - 关于使用nodejs从mongodb中的特定集合增加数据值的问题
- c++ - memcpy 命令在复制时交替数据
- rest - Logstash tcp 输入
- html - 在隐藏的收音机上显示 HTML5 表单验证错误消息
- javascript - 将函数传递给 JSON.stringify