是否可以在 Java 生产代码中使用 Junit Assert API

我想对我的方法参数进行空检查,就像参数不应该是空的一样。在我的Java代码中使用这样的东西可以吗?我试图避免assertNotNull("Map should not be null", filePaths);

if(filePaths == null){
  throw new IllegalArgumentException("Maps cannot be null");
}

只是为了让我的代码从所有这些空检查中清除干净。我知道我可以编写自己的类,并且有重载的方法,但是是否有一些存在且易于使用的东西,以免重新发明轮子。ValidatornotNull

我看到使用的唯一缺点是它抛出而不是等等。JUnitAssertAssertionErrorIllegalArgumentException


答案 1

如果您使用 Java 7+,则可以使用:

Objects.requireNonNull(filePaths, "Map should not be null");

同样对于空参数,我期望一个NullPointerException或TraventArgumentException,但不是AsserationError。


答案 2

不,使用它是不行的。JUnit 断言方法会引发一个 AssertionError。在生产代码中抛出 Error 不是一个好主意。来自 javadoc:

Error 是 Throwable 的一个子类,它指示合理的应用程序不应尝试捕获的严重问题。大多数此类错误都是异常情况。ThreadDeath 错误虽然是“正常”情况,但也是 Error 的子类,因为大多数应用程序不应尝试捕获它。方法不需要在其 throws 子句中声明在执行方法期间可能引发但未捕获的任何 Error 子类,因为这些错误是永远不应该发生的异常情况。也就是说,Error 及其子类被视为未检查的异常,以便对异常进行编译时检查。


推荐