假设我有一个方法,其中一些参数被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
永远不会传递给该方法。因此,当传递null
时,NPE可能会作为操作的副作用发生,但显式测试应该已经过时了。 - Holger@Nonnull
的误用。一个方法应该允许@Nullable
并且能够优雅地处理null
情况,或者不允许null
并期望调用者确保非空性。这就是这些注释的作用。它们不应该被视为应该遵循的 _提示_,否则可以在文档中简单说明,而不需要注释本身。 - AplusKminus