关于java:单元测试JUnit中的AssertError

Unit Testing AssertError in JUnit

我试图通过在方法的顶部添加一个断言语句来确保参数不能为null。

在单元测试时,我试图声明AssertError是预期的,但它仍然被识别为失败的测试,即使它的行为是正确的(AssertError被抛出)。

1
2
3
4
5
6
7
class ExampleTest {

  @Test(expected=AssertError.class)
  public void testAssertFails() {
     assert 0 == 1;
  }
}


您可能需要使用-ea JVM参数启用断言,因为默认情况下它们处于关闭状态。 当断言被禁用时,如果失败,assert将不会抛出异常。

如果您在Eclipse中运行它,则可以在首选项中编辑已安装的JRE以将其添加为参数,或者将其添加到测试的运行配置中。

此外,抛出的异常是AssertionError,而不是AssertError


将JVM级断言与JUnit断言混合可能不是一个好主意。 也就是说,这是在我们注释之前它是如何完成的。 您可以考虑这样做只是为了清晰/文档:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Foo {

   public void someMethod(String someArg)  {
       if (s == null) throw new NullPointerException("someArg cannot be null");
   }
}


public class FooTest {    

  public void testSomeMethodNullArg() {
    try {
        foo.someMethod(null);
        fail("someMethod failed to throw NullPointerException for null arg");
    } catch (NullPointerException expected) {
        // expected exception
    }
}


问题是,异常类不称为AssertError,但AssertionError检出Java API Javadoc。