【发布时间】:2015-09-27 16:34:53
【问题描述】:
假设我有一个方法,其中一些参数使用 javax @Nonnull 注释进行了注释。
public Something supply(@Nonnull SomeObject someObject) {
(...)
if (someObject == null) throw new ValidationException("Required parameter is null");
(...)
}
当我尝试使用显式 null 参数调用此方法时,IDE 会正确通知我,如下所示:
somethingSupplier.supply(null);
现在我要做的是创建单元测试,检查是否会抛出适当的异常,如果由于某种原因传递给此方法的参数恰好为空(假设它是某种验证异常)。
如果我尝试像上面的例子那样调用这个方法,IDE 会警告我将 null 传递给 @Nonnull... 但这正是我想要在这里做的。我可以使用 @SuppressWarnings("ConstantConditions") 注释调用或方法甚至测试类,但它会使代码混乱,并且我可能不会收到有关我在代码中犯的其他意外错误的警告。
所以问题是我是否可以在测试类中禁用对@Nonnull 的检查?或者我根本不应该对这些案例进行单元测试?
【问题讨论】:
-
@Nonnull注释并不意味着总是为null参数抛出NullPointerException。事实上,对于private方法,我认为这样的要求是一种资源浪费,因为验证应该确保在编译时null永远不会传递给该方法。因此 NPE 可能在通过null时作为操作的副作用出现,但显式测试应该已过时。 -
好吧,假设这个方法是公开的。此外,在此方法的主体中,有时会抛出一些自定义 ValidationException,这对我来说可能很重要(对于回滚或类似的东西)。我已经编辑了问题。
标签: java unit-testing intellij-idea java-8 intellij-13