JUnit 是一个流行的 Java 测试框架,它提供了一套丰富的断言(assertions)机制来帮助开发者验证代码的行为是否符合预期。断言是自动化测试中非常重要的一个概念,它用于检查代码是否按预期工作。如果断言失败,测试会立即停止执行,并报告失败的原因。
在 JUnit 中,断言主要通过 org.junit.Assert
类(在 JUnit 4 中)或者通过静态导入 JUnit 5 的 org.junit.jupiter.api.Assertions
类中的静态方法来实现。
JUnit 4 中的断言
在 JUnit 4 中,你可以使用 org.junit.Assert
类中的静态方法来执行断言。以下是一些常见的断言方法:
assertEquals(expected, actual)
: 检查两个值或数组是否相等。assertTrue(condition)
: 检查条件是否为真。assertFalse(condition)
: 检查条件是否为假。assertNotNull(object)
: 检查对象是否不为 null。assertNull(object)
: 检查对象是否为 null。assertSame(expected, actual)
: 检查两个对象引用是否指向同一个对象。assertNotSame(unexpected, actual)
: 检查两个对象引用是否不指向同一个对象。
JUnit 5 中的断言
JUnit 5 引入了更丰富的断言库,并且允许通过静态导入 org.junit.jupiter.api.Assertions
类中的静态方法来实现断言,使得代码更加简洁。以下是一些常见的断言方法(与 JUnit 4 类似,但可能有一些差异和新增):
assertEquals(expected, actual)
: 检查两个值是否相等。assertTrue(condition)
: 检查条件是否为真。assertFalse(condition)
: 检查条件是否为假。assertNotNull(object)
: 检查对象是否不为 null。assertNull(object)
: 检查对象是否为 null。assertSame(expected, actual)
: 检查两个对象引用是否相同。assertNotSame(unexpected, actual)
: 检查两个对象引用是否不同。
此外,JUnit 5 还添加了一些新的断言方法,如:
assertDoesNotThrow(executable, exceptionType)
: 验证代码块执行时不会抛出任何异常或特定类型的异常。assertThrows(expectedType, executable)
: 验证代码块执行时会抛出特定类型的异常。assertAll(executables)
: 将多个断言合并为一个,以便所有断言都失败时报告所有失败信息,而不是在第一个断言失败时就停止。
示例
JUnit 4 示例
import static org.junit.Assert.*;
import org.junit.Test;
public class MyTest {
@Test
public void testAddition() {
assertEquals("2 + 2 should equal 4", 4, 2 + 2);
}
}
JUnit 5 示例
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
public class MyTest {
@Test
public void testAddition() {
assertEquals(4, 2 + 2, "2 + 2 should equal 4");
}
@Test
public void testDivision() {
assertThrows(ArithmeticException.class, () -> {
int result = 10 / 0;
});
}
}