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

时间:2013-07-12 17:20:23

标签: java exception exception-handling junit illegalargumentexception

我想对我的方法参数进行空检查,比如参数不应为null。在我的Java代码中使用类似assertNotNull("Map should not be null", filePaths);的东西可以吗? 我试图避免

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

只是为了保持我的代码清除所有这些空检查。我知道我可以自己编写一个Validator类并且重载notNull方法,但是有一些现有的东西可以用来重新发明轮子。

我看到使用JUnit Assert的唯一缺点是它会抛出AssertionError而不是IllegalArgumentException等等。

2 个答案:

答案 0 :(得分:12)

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

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

同样使用null参数,我会期望NullPointerException或IllegalArgumentException,但不是AssertionError。

答案 1 :(得分:9)

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

  

错误是Throwable的子类,表示严重问题   一个合理的应用程序不应该试图抓住。最多的   错误是异常情况。 ThreadDeath错误,虽然是   "正常" condition,也是Error的子类,因为大多数   应用程序不应该试图抓住它。不需要方法   在其throws子句中声明可能是Error的任何子类   在执行该方法期间抛出但未捕获,因为这些   错误是不应该发生的异常情况。那就是错误   及其子类被视为未经检查的例外   编译时检查异常的目的。