How to mock super reference (on super class)?(如何模拟超级参考(在超级类上)?)
问题描述
有时当我编写单元测试时,我应该模拟对超类的引用.
Sometimes when I write unit tests I should to mock reference to superclass.
我读过这个问题:问题
此答案answer with DI 建议重构代码.但我做不到
This answer answer with DI advice to refactor code. But I cannot it
如果超类方法足够大,则此答案另一个答案不适合.就我而言,我有非常大的代码.是的,我知道它违反了 SOLID OOD 原则,但我应该编写测试.我没有足够的时间进行重构.
this answer another answer is not suitable if superclass method is enough big. In my case I have very big code. Yes I know that it is brokes SOLID OOD principes but I just should to write test. I have not enough time for refactor.
该问题是 4 年前提出的!
said question was asked 4 years ago!
目前 Mockito 或 Powermock 是否可以解决此问题?
Does currently Mockito or Powermock can resolve this issue ?
代码示例:
class BaseService {
public void save() {
// a lot of code here! I cannot change this code.
}
}
public Childservice extends BaseService {
public void save(){
//logic for testing
super.save();
//logic for testing
}
}
更新 2
public class Parent {
public int save() {
return 99;
}
}
public class Child extends Parent {
public int save() {
int i = super.save();
return i*2;
}
}
和测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Parent.class)
public class ParentTest {
@Test
public void testSave() {
PowerMockito.suppress(PowerMockito.methodsDeclaredIn(Parent.class));
System.out.println(new Child().save());
}
}
输出:198
推荐答案
使用 Powermock 您可以替换或抑制方法,因此可以更改 BaseService.save() 完成的操作.您还可以使方法对抑制不做任何事情.您甚至可以抑制静态初始化程序块.
With Powermock you can replace or suppress methods, so it is possible to change the action done by BaseService.save(). You can also make methods to do nothing with suppressing. You can even suppress static initializer blocks.
请阅读 Powermock 作者的这篇博文.请参阅更换"一章.
Please read this blog entry of the Powermock authors. See chapter "Replacing".
更新:
抑制似乎对我有用,但替换不行.见下图:
Suppress seems to work for me, but replace not. See the picture below:
这篇关于如何模拟超级参考(在超级类上)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何模拟超级参考(在超级类上)?
基础教程推荐
- Struts2 URL 无法访问 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- 如何对 Java Hashmap 中的值求和 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
