JUnit 5 Nested - JUnit 151

JUnit 5 Nested – JUnit 151

  • Post author:
  • Post category:RD / JUnit
  • Post comments:0 Comments
  • Post last modified:2023-02-19

JUnit 5 Nested

建立內嵌測試,以靜態內部類別的形式,對測試用例進行分組,此外還有略過某個測試方法,及標記測試方法等註解說明,採用單元測試來驗證產出結果。

檔案目錄

./
   +- build.gradle
           +- test
           |   +- org
           |       +- ruoxue
           |           +- spring_boot_168
           |               +- test
           |                   +- junit5
           |                       +- JUnit5NestedTest.java    
           |                       +- JUnit5TagTest.java    
           |                       +- WordTest.java  

註解說明

提供多樣化的註解宣告。

AnnotationsDescription
@Nested 建立內嵌測試類別。
@Disable禁用執行測試。
@Tag標記測試方法。

單元測試

WorldTest.java

假設單一測試類別,包含許多測試用例,隨著需求的增加,測試方法會不斷地增加,可能將會超過上百個測試,因此可以考慮建立內嵌測試類別,結構化輸出,增加程式可讀性。

package org.ruoxue.spring_boot_168.test.junit5;

import org.junit.jupiter.api.Test;

public class WorldTest {

	@Test
	public void springWorld() {
		System.out.println("Spring World");
	}

	@Test
	public void springWorld_2() {
		System.out.println("Spring World 2");
	}

	@Test
	public void springWorld_3() {
		System.out.println("Spring World 3");
	}

	@Test
	public void javaWorld() {
		System.out.println("Java World");
	}

	@Test
	public void javaWorld_2() {
		System.out.println("Java World 2");
	}

	@Test
	public void javaWorld_3() {
		System.out.println("Java World 3");
	}
}

JUnit 5 Nested

建立內嵌測試類,以靜態內部類別的形式,對測試進行分組。

	@Nested
	@DisplayName("Spring World")
	public class SpringWorldTest {
		@Test
		public void springWorld() {
			System.out.println("Spring World");
		}

		@Test
		public void springWorld_2() {
			System.out.println("Spring World 2");
		}

		@Test
		public void springWorld_3() {
			System.out.println("Spring World 3");
		}
	}

	@Nested
	@DisplayName("Java World")
	public class JavaWorldTest {
		@Test
		public void javaWorld() {
			System.out.println("Java World");
		}

		@Test
		public void javaWorld_2() {
			System.out.println("Java World 2");
		}

		@Test
		public void javaWorld_3() {
			System.out.println("Java World 3");
		}
	}
beforeEach
Spring World

beforeEach
Spring World 2

beforeEach
Spring World 3

beforeEach
Java World 2

beforeEach
Java World 3

beforeEach
Java World

JUnit 5 Disabled

禁用某個測試方法。
	@Disabled
	@Test
	public void springWorld() {
		System.out.println("Spring World");
	}

禁用某個測試類別。

@Disabled
public class JUnit5NestedTest {

	@Test
	public void springWorld() {
		System.out.println("Spring World");
	}
}

JUnit 5 Tag

可以使用在測試類別和方法。

	@Tag("develop")
	@Test
	public void develop() {
		System.out.println("develop");
	}

	@Tag("prod")
	@Test
	public void prod() {
		System.out.println("prod");
	}

build.gradle
增加 includeTags ,執行測試 develop 、 prod 。

test {
	useJUnitPlatform {
		includeTags 'develop', 'prod'
	}
}
gradle clean test
> Task :test

org.ruoxue.spring_boot_168.test.junit5.JUnit5TagTest > develop() PASSED

org.ruoxue.spring_boot_168.test.junit5.JUnit5TagTest > prod() PASSED

JUnit5NestedTest.java

package org.ruoxue.spring_boot_168.test.junit5;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

public class JUnit5NestedTest {

	@BeforeEach
	public void beforeEach() throws Exception {
		System.out.println("beforeEach");
	}

	@Nested
	@DisplayName("Spring World")
	public class SpringWorldTest {
		@Test
		public void springWorld() {
			System.out.println("Spring World");
		}

		@Test
		public void springWorld_2() {
			System.out.println("Spring World 2");
		}

		@Test
		public void springWorld_3() {
			System.out.println("Spring World 3");
		}
	}

	@Nested
	@DisplayName("Java World")
	public class JavaWorldTest {
		@Test
		public void javaWorld() {
			System.out.println("Java World");
		}

		@Test
		public void javaWorld_2() {
			System.out.println("Java World 2");
		}

		@Test
		public void javaWorld_3() {
			System.out.println("Java World 3");
		}
	}

	@Disabled
	@Test
	public void springWorld() {
		System.out.println("Spring World");
	}

	@Test
	public void itWorld() {
		System.out.println("IT World");
	}
}

JUnit5TagTest.java

package org.ruoxue.spring_boot_168.test.junit5;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

public class JUnit5TagTest {

	@Tag("develop")
	@Test
	public void develop() {
		System.out.println("develop");
	}

	@Tag("prod")
	@Test
	public void prod() {
		System.out.println("prod");
	}
}

心得分享

Assertions JUnit 提供測試範例參考,隨著測試程式越來越多時,使用內部類別分組,可以更有系統的管理測試用例,每個內部類別都可以有自己的生命週期方法,這些方法將按從外到內層次順序執行,JUnit Assert 確保系統保持在一個穩定的狀況中成長。

發佈留言