单元测试JUnit中的AssertError

时间:2010-01-28 00:27:09

标签: java unit-testing junit assert

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

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

class ExampleTest {

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

问题是,异常类不是AssertError,而是AssertionError,请查看Java API Javadoc。

答案 2 :(得分:0)

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

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
    }
}