如果Java代码断言失败,则进行JUnit测试

时间:2016-02-11 08:43:17

标签: java unit-testing junit test-coverage

这似乎太容易和明显,但我无法找到如何测试以下内容:

我的Java方法:

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

我的测试:

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

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

我在断言的两种情况下都进行了测试,但是我无法理解断言是否失败。

我希望我的代码测试覆盖率达到100%,并希望在此行上测试一些有意义的内容。

2 个答案:

答案 0 :(得分:6)

如果断言为假,

assert会抛出AssertionError

如果要测试参数为null时发生断言,可以使用expected注释的@Test参数(需要JUnit 4 +)来执行此操作:< / p>

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

答案 1 :(得分:2)

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

尝试使用Java 8 Objects.requireNonNull()

Java类

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

测试类

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