我正在尝试为遗留库添加一些功能,并计划使其可测试。
我想在测试环境中限制一些允许调用的方法,比如更改全局系统配置。由于某些变化对生产是危险的,因此限制访问是非常重要的。
我使用junit4来测试我的项目,对它有什么建议吗?
class Foo {
public void methodA() {
// is it possible limit methodA only allowed invoked by JUNIT ?
}
}
答案 0 :(得分:1)
我想到的是使用依赖注入来使用相同接口的两个不同实现,一个用于生产,一个用于测试。在生产执行中注入的那个可能只有空方法,实际上什么都不做。概念:
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());
答案 1 :(得分:1)
我会制作一个存根
Lib l = new Lib() {
@Override
void xxx() {
Assert.fail("calling xxx() is not allowed");
}
};
答案 2 :(得分:0)
您可以使方法包为private,并将测试放在同一个包中。
public class Foo{
public void publicMethod();
void forTestingOnly();
}