我有一个像这样的方法:
public void foo(@Nonnull String value) {...}
我想编写一个单元测试以确保在何时foo()
抛出 NPE但我不能,因为当在 IDE 中启用静态空指针流分析时编译器拒绝编译单元测试。value
null
如何编译此测试(在 Eclipse 中启用“启用基于注释的空分析”):
@Test(expected = NullPointerException.class)
public void test() {
T inst = ...
inst.foo(null);
}
注意:理论上编译器的静态空指针应该可以防止这样的情况。但是没有什么能阻止某人在关闭静态流分析的情况下编写另一个模块并使用null
.
常见案例:没有流程分析的大杂乱旧项目。我从注释一些实用程序模块开始。在这种情况下,我将有现有的或新的单元测试来检查所有尚未使用流分析的模块的代码行为。
我的猜测是我必须将这些测试移动到一个未经检查的模块中,并在我展开流分析时移动它们。这会奏效并且非常符合哲学,但这将是大量的手工工作。
换句话说:我不能轻易地编写一个测试,上面写着“代码无法编译时成功”(我必须将代码片段放入文件中,从单元测试中调用编译器,检查输出是否有错误。 .. 不漂亮)。那么,当调用者忽略时,如何轻松@Nonnull
测试代码是否会失败?