我有以下情况。我有一个班级
A {
public void setProps() {
// setting propertis
makeSomeWeirdConfigs();
//setting another properties
}
private void makeSomeWeirdConfigs() {
// making configs
}
public Props getProps() {
//getting properties
}
}
现在我想在JUnit测试用例的帮助下检查是否使用方法setProps()
正确设置了属性,然后使用getProps()
获取属性。
问题是这个方法makeSomeWeirdConfigs()
位于setProps()
的中间,在没有适当环境的情况下执行会导致很多异常,所以不设置此方法下面的道具。
此方法也尝试执行危险的操作,例如执行一些脚本等。所以我的问题是可以在JUnit测试用例中以某种方式跳过此方法makeSomeWeirdConfigs()
,因此只有setProps()
和{ {1}}已执行。
不应更改原始A类。
谢谢
答案 0 :(得分:1)
"不应更改原始课程" - 然后你正在寻找一些嘲弄,字节码摆弄,AOP。
如果您使makeSomeWeirdConfig
受保护,则可以覆盖该方法并测试子类。测试额外的标志也一样。
如果您可以将代码更好地放在委托人的声音代码中。
class SomeWeirdConfig {
void makeSomeWeirdConfigs() { ... }
}
SomeWeirdConfig delegate = new SomeWeirdConfig();
public void initTest() { delegate = null; }
private void makeSomeWeirdConfigs() {
if (delegate != null) {
delegate.makeSomeWeirdConfigs();
}
}
然后测试可以禁用设置器。