官方文档 - Nested Tests
    JUnit 5 可以通过 Java 中的内部类和@Nested 注解实现嵌套测试,从而可以更好的把相关的测试方法组织在一起。在内部类中可以使用@BeforeEach@AfterEach注解,而且嵌套的层次没有限制。

    1. @DisplayName("A stack")
    2. class TestingAStackDemo {
    3. Stack<Object> stack;
    4. @Test
    5. @DisplayName("is instantiated with new Stack()")
    6. void isInstantiatedWithNew() {
    7. new Stack<>();
    8. }
    9. @Nested
    10. @DisplayName("when new")
    11. class WhenNew {
    12. @BeforeEach
    13. void createNewStack() {
    14. stack = new Stack<>();
    15. }
    16. @Test
    17. @DisplayName("is empty")
    18. void isEmpty() {
    19. assertTrue(stack.isEmpty());
    20. }
    21. @Test
    22. @DisplayName("throws EmptyStackException when popped")
    23. void throwsExceptionWhenPopped() {
    24. assertThrows(EmptyStackException.class, stack::pop);
    25. }
    26. @Test
    27. @DisplayName("throws EmptyStackException when peeked")
    28. void throwsExceptionWhenPeeked() {
    29. assertThrows(EmptyStackException.class, stack::peek);
    30. }
    31. @Nested
    32. @DisplayName("after pushing an element")
    33. class AfterPushing {
    34. String anElement = "an element";
    35. @BeforeEach
    36. void pushAnElement() {
    37. stack.push(anElement);
    38. }
    39. @Test
    40. @DisplayName("it is no longer empty")
    41. void isNotEmpty() {
    42. assertFalse(stack.isEmpty());
    43. }
    44. @Test
    45. @DisplayName("returns the element when popped and is empty")
    46. void returnElementWhenPopped() {
    47. assertEquals(anElement, stack.pop());
    48. assertTrue(stack.isEmpty());
    49. }
    50. @Test
    51. @DisplayName("returns the element when peeked but remains not empty")
    52. void returnElementWhenPeeked() {
    53. assertEquals(anElement, stack.peek());
    54. assertFalse(stack.isEmpty());
    55. }
    56. }
    57. }
    58. }