一.注解
• @Test:标记一个测试用例
• @Disable:忽略此条测试用例
• @BeforeAll:在所有用例执行前先执行
• @AfterAll:在所有用例执行后再执行
• @BefortEach :在每个测试用例执行前执行
• @AfterEach:在每个测试用例执行后执行
public class Test1 { @Test public void test01(){ System.out.println("这是test01中的数据"); } @Test void test02(){ System.out.println("这是test02中的数据"); } @Disabled void test03(){ System.out.println("这是test03中的数据"); } @AfterAll static void test04(){ System.out.println("这是afterAll的内容"); } @BeforeAll static void Test05(){ System.out.println("这是beforeAll的内容"); } @BeforeEach void test06(){ System.out.println("这是BeforeEach的内容"); } @AfterEach void test07(){ System.out.println("这是AfterEach的内容"); } }
执行结果:
二.参数化
此时也是要导入新的依赖:
2.1 单参数
@ParameterizedTest @ValueSource(ints = {1,2,3}) void test01(int n){ System.out.println(n); } @ParameterizedTest @ValueSource(strings ="1") void test02(String s){ System.out.println(s); }
2.2 CSV获取参数
/* 张三,李四 张三2,李四2 张三3,李四3*/ @ParameterizedTest //在resources中创建一个同名文件,文件每一行一次测试的内容,测试用例可根据参数类型自动匹配 @CsvFileSource(resources = "/name.csv") void test03(String n,String s){ System.out.println(n+","+s); } @ParameterizedTest //空字符串使用''来传递 @CsvSource({"1,张三","2,李四","3,''"}) void test05(int n,String name){ System.out.println(n+","+name); }
2.3 方法获取参数
public static Stream<Arguments> generator(){ return Stream.of(Arguments.arguments(1,"张三"),Arguments.arguments(2,"李四"),Arguments.arguments(3,"王五")); } // @Test // @Test不能与@ParameterizedTest一同使用,两者会产生冲突 @ParameterizedTest @MethodSource("generator") void Test04(int num,String name){ System.out.println(num+" "+name); }
2.4 执行顺序
在项目中,测试的各方法的执行顺序不是自上而下的
/*指定每个方法的执行顺序 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)*/ //随机执行,但是仍可以通过@Order来执行 @TestMethodOrder(MethodOrderer.Random.class) public class JOrder { //@Order(2) @Test void B(){ System.out.println("b"); } //@Order(1) @Test void A() { System.out.println("a"); } //@Order(3) @Test void test01(){ System.out.println("test01"); } //@Order(4) @Test void test02(){ System.out.println("test02"); } }
2.5 断言
@ParameterizedTest @ValueSource(strings ="1") void test02(String s){ // Assertions.assertEquals("1",s); // Assertions.assertNotEquals("2",s); String str=null; Assertions.assertNull(str); /* String str="string"; Assertions.assertNotNull(str,);*/ }
三.测试套件
依赖:
<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite --> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-suite</artifactId> <version>1.9.1</version> <scope>test</scope> </dependency> <!--suite 需要engine--> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.9.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-suite-api</artifactId> <version>1.9.1</version> </dependency>
package junit_Sele.pakage1; import org.junit.jupiter.api.Test; public class Test1 { @Test void test01(){ System.out.println("junit_Sele/pakage1/test1"); } } package junit_Sele.pakage1; import org.junit.jupiter.api.Test; public class Test2 { @Test public void Test2(){ System.out.println("junit_Sele/pakage1/test2"); } } package junit_Sele.pakage2; import org.junit.jupiter.api.Test; public class Test1 { @Test void test01(){ System.out.println("junit_Sele/pakage2"); } }
@Suite //指定同一个包中的不同类运行的顺序 //@SelectClasses({JAssert.class, JOrder.class,Para.class}) //指定一个包中不同类运行的顺序 @SelectPackages(value = {"junit_Sele.pakage1", "junit_Sele.pakage2"}) //指定一个包的同时指定包内的类的运行顺序 @SelectClasses({junit_Sele.pakage1.Test1.class,junit_Sele.pakage1.Test2.class}) public class RunSuite { }