我正在尝试向遗留库添加一些功能并计划使其可测试。
我想限制在测试上下文中允许调用的一些方法,比如更改全局系统配置。因为某些更改对生产来说是危险的,所以限制可访问性很重要。
我使用junit4来测试我的项目,有什么建议吗?
class Foo {
public void methodA() {
// is it possible limit methodA only allowed invoked by JUNIT ?
}
}
我想到的是使用依赖注入来使用同一接口的两种不同实现,一种用于生产,一种用于测试。您在生产执行中注入的那个可能只有一个实际上什么都不做的空方法。概念:
class Foo {
private Bar bar;
public Foo() {
bar = new DefultBarImplementation();
}
public setBar(Bar bar) {
this.bar = bar;
}
//use bar in your other methods
}
在你的测试中
Foo foo = new Foo();
foo.setBar(new TestBarImplementation());
我会做一个存根
Lib l = new Lib() {
@Override
void xxx() {
Assert.fail("calling xxx() is not allowed");
}
};
您可以将方法设为包私有,并将测试放在同一个包中。
public class Foo{
public void publicMethod();
void forTestingOnly();
}