如何检查单元测试上下文中执行的方法?

时间:2013-09-18 05:30:57

标签: java junit

我正在尝试为遗留库添加一些功能,并计划使其可测试。

我想在测试环境中限制一些允许调用的方法,比如更改全局系统配置。由于某些变化对生产是危险的,因此限制访问是非常重要的。

我使用junit4来测试我的项目,对它有什么建议吗?

class Foo {
    public void methodA() {
        // is it possible limit methodA only allowed invoked by JUNIT ?
    }
}

3 个答案:

答案 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();

}