代码之家  ›  专栏  ›  技术社区  ›  Allain Lalonde

JUnit中的单元测试断言错误

  •  0
  • Allain Lalonde  · 技术社区  · 15 年前

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

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

    class ExampleTest {
    
      @Test(expected=AssertError.class) 
      public void testAssertFails() {
         assert 0 == 1;
      }
    }
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   Kaleb Brasee    15 年前

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

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

    此外,引发的异常是 AssertionError 不是 AssertError .

        2
  •  0
  •   Gabriel Ščerbák    15 年前

    问题是,Exchange类不被称为AdjDebug,但AdvestError检查Java API JavaDoc。

        3
  •  0
  •   George Armhold    14 年前

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