当前位置: 代码迷 >> 综合 >> junit5 入门系列教程-11-junit5 内嵌测试(Nested Tests)
  详细解决方案

junit5 入门系列教程-11-junit5 内嵌测试(Nested Tests)

热度:38   发布时间:2024-01-06 11:10:07.0

目录

  • 目录
  • 嵌套测试
    • 实例
    • 说明
  • 系列导航

嵌套测试

嵌套测试使测试编写者有更多的能力来表达几组测试之间的关系。这是一个精心设计的例子。

实例

  • TestingAStackDemo.java

堆栈测试例子

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;import java.util.EmptyStackException;
import java.util.Stack;import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;@DisplayName("A stack")
class TestingAStackDemo {Stack<Object> stack;@Test@DisplayName("is instantiated with new Stack()")void isInstantiatedWithNew() {new Stack<>();}@Nested@DisplayName("when new")class WhenNew {@BeforeEachvoid createNewStack() {stack = new Stack<>();}@Test@DisplayName("is empty")void isEmpty() {assertTrue(stack.isEmpty());}@Test@DisplayName("throws EmptyStackException when popped")void throwsExceptionWhenPopped() {assertThrows(EmptyStackException.class, () -> stack.pop());}@Test@DisplayName("throws EmptyStackException when peeked")void throwsExceptionWhenPeeked() {assertThrows(EmptyStackException.class, () -> stack.peek());}@Nested@DisplayName("after pushing an element")class AfterPushing {String anElement = "an element";@BeforeEachvoid pushAnElement() {stack.push(anElement);}@Test@DisplayName("it is no longer empty")void isNotEmpty() {assertFalse(stack.isEmpty());}@Test@DisplayName("returns the element when popped and is empty")void returnElementWhenPopped() {assertEquals(anElement, stack.pop());assertTrue(stack.isEmpty());}@Test@DisplayName("returns the element when peeked but remains not empty")void returnElementWhenPeeked() {assertEquals(anElement, stack.peek());assertFalse(stack.isEmpty());}}}
}

说明

只有非静态嵌套类(即内部类)可以充当@嵌套测试类。
嵌套可以是任意深的,并且这些内部类被认为是测试类家族的完整成员,只有一个例外:@BeforeAll和@AfterAll方法默认不工作。
原因是Java不允许内部类中的静态成员。
但是,可以通过使用 @TestInstance(Lifecycle.PER_CLASS) 注释 @Nested 测试类(参见测试实例生命周期)来绕过这个限制。

系列导航

系列导航

  相关解决方案