在JUnit中,断言(Assertions)是验证测试结果是否符合预期的核心机制。断言帮助开发者确保代码的行为正如他们所期望的那样。JUnit 5(JUnit Jupiter)提供了一系列丰富的断言API,下面是一些常用断言方法的示例和说明:
1. 基本断言
-
assertEquals(expected, actual, [message])
验证实际值(actual)和预期值(expected)是否相等。如果不等,则测试失败。可选的消息参数会在失败时提供额外的上下文信息。 -
assertTrue(condition, [message])
验证给定条件(condition)是否为真。如果条件为假,则测试失败。 -
assertFalse(condition, [message])
验证给定条件(condition)是否为假。如果条件为真,则测试失败。 -
assertNull(object, [message])
验证对象是否为null。如果不为null,则测试失败。 -
assertNotNull(object, [message])
验证对象是否不为null。如果为null,则测试失败。 -
assertSame(expected, actual, [message])
验证两个对象引用是否指向同一个对象。如果不是同一个对象,则测试失败。 -
assertNotSame(unexpected, actual, [message])
验证两个对象引用是否不指向同一个对象。如果是同一个对象,则测试失败。
2. 数组与集合断言
-
assertArrayEquals(expecteds, actuals, [message])
验证两个数组是否相等,考虑元素顺序和类型。 -
assertIterableEquals(expected, actual, [message])
验证两个Iterable(如List, Set)是否相等,考虑元素顺序和类型。 -
assertListEquals(expected, actual, [message])
特殊化版本的assertIterableEquals
,专门用于验证List。
3. 异常断言
- assertThrows(expected, executable)
验证执行特定代码块(executable)时是否抛出了预期类型的异常。如果没抛出异常或异常类型不符,测试失败。此方法还会返回抛出的异常实例,可用于进一步的检查。
4. 字符串断言
-
assertThat(actual, matcher)
使用Hamcrest匹配器来验证实际值。这提供了更复杂的验证逻辑,如字符串包含、正则匹配等。 -
assertEqualsIgnoringCase(expected, actual)
忽略大小写的字符串比较。
5. 条件断言
-
assumeTrue(condition, [message])
如果条件不为真,则假设失败,测试将被忽略而不是失败。 -
assumeFalse(condition, [message])
如果条件为真,则假设失败,测试将被忽略。
使用示例
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class MyTests {
@Test
void testAddition() {
Calculator calculator = new Calculator();
int result = calculator.add(3, 4);
assertEquals(7, result, "3 + 4 应该等于 7");
}
@Test
void testExceptionThrown() {
assertThrows(IllegalArgumentException.class, () -> {
throw new IllegalArgumentException("Expected exception message");
});
}
}
使用断言时,确保它们简洁明了,每个断言只测试一个条件,这样当测试失败时,可以更容易地定位问题所在。