Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏多维度架构

25.2. JUnit 5 注解

JUnit 5 常用注解

		
名称				说明
@Test			表明一个测试方法
@DisplayName	测试类或方法的显示名称
@BeforeEach		表明在单个测试方法运行之前执行的方法
@AfterEach		表明在单个测试方法运行之后执行的方法
@BeforeAll		表明在所有测试方法运行之前执行的方法
@AfterAll		表明在所有测试方法运行之后执行的方法
@Disabled		禁用测试类或方法
@Tag			为测试类或方法添加标签
		
		

25.2.1. @Disabled

			
	@Test
    @Disabled("这条用例暂时跑不过,忽略!")
    void myFailTest(){
        assertEquals(1,2);
    }			
			
			

25.2.2. @Tag

元注解标签

			
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Tag("remote")
public @interface Remote {
}			
			
			

			
@DisplayName("Remote test")
public class RemoteTest {
	@Test
	@Remote
	public void testGetUser() {
		System.out.println("Get user");
	}
}
			
			

25.2.3. @Nested

			
package junit5;

import static org.junit.jupiter.api.Assertions.*;

import java.util.HashMap;
import java.util.Map;

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("Nested tests for HashMap")
class Junit5NestedTest {

	Map<String, Object> map;

	@Nested

	@DisplayName("when a new")
	class WhenNew {

		@BeforeEach
		void create() {
			map = new HashMap<>();
		}

		@Test

		@DisplayName("is empty")
		void isEmpty() {
			assertTrue(map.isEmpty());
		}

		@Nested

		@DisplayName("after adding a new entry")
		class AfterAdd {

			String key = "key";
			Object value = "value";

			@BeforeEach
			void add() {
				map.put(key, value);
			}

			@Test

			@DisplayName("is not empty")
			void isNotEmpty() {
				assertFalse(map.isEmpty());
			}

			@Test

			@DisplayName("returns value when getting by key")
			void returnValueWhenGettingByKey() {
				assertEquals(value, map.get(key));
			}

			@Nested

			@DisplayName("after removing the entry")
			class AfterRemove {

				@BeforeEach
				void remove() {
					map.remove(key);
				}

				@Test

				@DisplayName("is empty now")
				void isEmpty() {
					assertTrue(map.isEmpty());
				}

				@Test

				@DisplayName("returns null when getting by key")
				void returnNullForKey() {
					assertNull(map.get(key));
				}
			}
		}
	}

}

			
			

25.2.4. @TestFactory

			
	@TestFactory
	public Collection<DynamicTest> simpleDynamicTest() {
		return Collections.singleton(dynamicTest("simple dynamic test", () -> assertTrue(2 > 1)));
	}			
			
			

DynamicTest 提供了一个静态方法 stream 来根据输入生成动态测试

			
	@TestFactory
	public Stream<DynamicTest> streamDynamicTest() {
	 return stream(
	       Stream.of("Hello", "World").iterator(),
	       (word) -> String.format("Test - %s", word),
	       (word) -> assertTrue(word.length() > 4)
	 );
	}