JUnit 测试 Java 代码断言是否失败

JUnit test if Java code assert fails

这似乎太简单明了,但我找不到如何测试以下内容:

我的Java方法:

public void doSth(final Foo foo) {
    assert foo != null;
    ..
}

我的测试:

 @Test
 public void testAssertion() {
      doSth();
      doSth(new Foo());
 }

我可以用 assertEquals 等测试很多东西,但是如果 foo != null; 上的断言给出否定,如何创建一个给出 true 的测试用例?

我现在的测试在两种断言情况下都显示为绿色,但我无法捕捉到断言是否失败。

我希望我的代码测试覆盖率达到 100%,并且想在此行测试一些有意义的东西。

assert 如果断言为假则抛出 AssertionError

如果要测试当参数为null时是否发生断言,可以使用@Test注解的expected参数来实现(需要JUnit 4+) :

@Test(expected = AssertionError.class)
public void testAssertion() {
    doSth(null);
}

在您的代码中使用 assert 是一种不好的做法。

尝试使用Java 8 Objects.requireNonNull()

Java Class

public void doSth(final Foo foo) {
    Objects.requireNonNull(foo);
    ..
}

测试Class

@Test(expected = NullPointerException.class)
public void testNPE() {
     doSth(null);
}