如何单元测试应该导致编译错误的代码

时间:2015-07-13 04:29:41

标签: java unit-testing junit

我有一个以ArrayList作为参数的类:

public class Foo {
    private ArrayList<Bar> bars;

    public Foo(ArrayList barList) {
        bars = barList;
    }
}

我可以将任何ArrayList传递给构造函数中的错误:

// should compile error with this line
Foo foo = new Foo(new ArrayList<String>());

问题是如果我将这个案例添加到测试套件中,当bug修复时,我无法编译它。 无论如何都要测试这个案子吗?

3 个答案:

答案 0 :(得分:2)

我不知道任何语言/单元测试框架会让你“测试”不应该编译的代码。如果你无法编译它,没有什么可以测试的。但是,您可以在构建时打开所有编译器警告。我非常确定在JDK5之后传递一个非参数集合是一个很大的警告。

答案 1 :(得分:1)

我认为这是不好的做法而且我并没有真正看到它的用途,但请参阅此示例以了解如何测试编译错误:

ArrayBuffer

编辑: 1)我不确定这可能与maven等构建工具一起发挥作用。据我所知,maven在编译错误时打破了构建,因此可能甚至不会执行测试。

答案 2 :(得分:0)

修复方法签名:

public Foo(ArrayList<Bar> barList) {
    bars = barList;
}

问题解决了。 (您可能还想检查null。)