📅  最后修改于: 2023-12-03 15:10:24.358000             🧑  作者: Mango
JUnit是Java中最常用的测试框架之一。JUnit提供了很多的断言方法,用于测试代码的正确性。在实际开发过程中,我们需要同时验证多个条件是否满足,这时,就需要使用多个断言方法来测试代码的正确性。
JUnit提供了很多的断言方法,比如assertEquals(),assertNotNull(),assertTrue()等。在JUnit 4.4版本之后,JUnit提供了一种更加方便的方式来进行多个断言的测试。
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
public class ExampleTest {
@Test
public void test() {
Assertions.assertAll("test",
() -> Assertions.assertEquals(1, 1),
() -> Assertions.assertTrue(1 == 1),
() -> Assertions.assertNotNull("not null"),
() -> Assertions.assertNotEquals(1, 2));
}
}
在上面的代码中,我们使用了Assertions.assertAll()方法来执行多个断言。Assertions.assertAll()方法的第一个参数是一个描述信息,类似于@Test注解的参数。后面的参数是多个断言方法,并使用lambda表达式来执行具体的断言。
在JUnit 5中,我们可以使用Assertions的一个新特性:断言组。断言组可以用来将多个断言方法放到一起进行测试,并且支持嵌套的方式。
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
@DisplayName("A stack")
public class StackTest {
Stack<String> stack = new Stack<>();
@Test
@DisplayName("is instantiated with new Stack()")
void isInstantiatedWithNew() {
new Stack<>();
}
@Nested
@DisplayName("when new")
class WhenNew {
@Test
@DisplayName("is empty")
void isEmpty() {
Assertions.assertTrue(stack.isEmpty());
}
@Test
@DisplayName("throws EmptyStackException when popped")
void throwsExceptionWhenPopped() {
Assertions.assertThrows(EmptyStackException.class, stack::pop);
}
@Test
@DisplayName("throws EmptyStackException when peeked")
void throwsExceptionWhenPeeked() {
Assertions.assertThrows(EmptyStackException.class, stack::peek);
}
@Nested
@DisplayName("after pushing an element")
class AfterPushing {
String element = "an element";
@BeforeEach
void pushElement() {
stack.push(element);
}
@Test
@DisplayName("it is no longer empty")
void isNotEmpty() {
Assertions.assertFalse(stack.isEmpty());
}
@Test
@DisplayName("returns the element when popped and is empty")
void returnElementWhenPopped() {
Assertions.assertEquals(element, stack.pop());
Assertions.assertTrue(stack.isEmpty());
}
@Test
@DisplayName("returns the element when peeked but remains not empty")
void returnElementWhenPeeked() {
Assertions.assertEquals(element, stack.peek());
Assertions.assertFalse(stack.isEmpty());
}
}
}
}
在上面的代码中,我们使用了@Nested注解来定义嵌套测试类。@Nested注解还可以与@BeforeAll,@AfterAll,@BeforeEach和@AfterEach注解一起使用。此外,我们还使用了@DisplayName注解来为测试输出更加友好的信息。最后,我们使用了多个断言方法来执行具体的断言。如果有任何一个断言方法失败,整个测试也将失败。