当前位置:   article > 正文

初识Junit以及相关用法_junit assert 对应 junit-jupiter-api

junit assert 对应 junit-jupiter-api

目录

一、Junit 是什么

二、Junit相关依赖

三、注解

3.1 @Test

3.2 @BeforeAll、AfterAll

3.3 @BeforeEach、AfterEach

3.4 @Disable

四、测试用例执行顺序

1)如何按照指定的顺序运行

2)按照ASCII顺序执行

五、断言

5.1 断言相等、断言不相等

5.2 断言为空、断言不为空        

六、参数化

6.1 单参数

6.2 多参数

1) 通过CsvSource获取数据

2)通过CsvFileSource文件获取数据

3)通过方法获取数据

七、测试套件

1)按照Class执行,想要执行哪些类下的测试用例,就写在value后面

2)按照包执行


一、Junit 是什么

Junit 是针对Java的单元测试框架

和Selenium的区别

Selenium是自动化测试框架,用来编写测试用例的

Junit是单元测试框架,用来管理测试用例

举例:

把Selenium当做一个灯泡,如何控制开关,通过Junit来控制,Junit在这里就相当于开关

二、Junit相关依赖

在Maven Repository中找Junit的依赖

https://mvnrepository.com/search?q=junit

  1. //版本自己确定,但是都必须是一样的!!!
  2. //1. JUnit Jupiter API
  3. <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
  4. <dependency>
  5. <groupId>org.junit.jupiter</groupId>
  6. <artifactId>junit-jupiter-api</artifactId>
  7. <version>5.9.1</version>
  8. <scope>test</scope>
  9. </dependency>
  10. //2.JUnit Jupiter (Aggregator)
  11. <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
  12. <dependency>
  13. <groupId>org.junit.jupiter</groupId>
  14. <artifactId>junit-jupiter</artifactId>
  15. <version>5.9.1</version>
  16. <scope>test</scope>
  17. </dependency>
  18. //3.JUnit Jupiter Params
  19. <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
  20. <dependency>
  21. <groupId>org.junit.jupiter</groupId>
  22. <artifactId>junit-jupiter-params</artifactId>
  23. <version>5.9.1</version>
  24. <scope>test</scope>
  25. </dependency>
  26. //4. JUnit Platform Suite (Aggregator)
  27. Module "junit-platform-suite" of JUnit 5.
  28. <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
  29. <dependency>
  30. <groupId>org.junit.platform</groupId>
  31. <artifactId>junit-platform-suite</artifactId>
  32. <version>1.9.1</version>
  33. <scope>test</scope>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.junit.platform</groupId>
  37. <artifactId>junit-platform-suite-api</artifactId>
  38. <version>1.9.1</version>
  39. </dependency>

三、注解

3.1 @Test

测试方法,通过@Test注解的方法不放在main方法中就可以直接运行

3.2 @BeforeAll、AfterAll

  1. import org.junit.jupiter.api.*;
  2. public class TestJunit {
  3. @BeforeAll
  4. static void SetUp() {
  5. System.out.println("开始执行测试用例");
  6. }
  7. @BeforeEach
  8. void before(){
  9. System.out.println("BeforeEach注解的方法开始执行");
  10. }
  11. @AfterEach
  12. void after(){
  13. System.out.println("AfterEach注解的方法开始执行");
  14. }
  15. @Test
  16. void Test01() {
  17. System.out.println("这是测试用例一");
  18. }
  19. @Test
  20. void Test02() {
  21. System.out.println("这是测试用例二");
  22. }
  23. @AfterAll
  24. static void TearDown() {
  25. System.out.println("结束");
  26. }
  27. }

@BeforeAll: 所有的测试用例执行之前执行对应方法里面的语句

@AfterAll: 所有的测试用例执行结束之后执行对应方法里面的语句

3.3 @BeforeEach、AfterEach

@BeforeEach: 每一个测试用例执行之前执行对应方法里面的语句

@AfterEach: 每一个测试用例执行结束之后执行对应方法里面的语句

  1. 开始执行测试用例
  2. BeforeEach注解的方法开始执行
  3. 这是测试用例一
  4. AfterEach注解的方法开始执行
  5. BeforeEach注解的方法开始执行
  6. 这是测试用例二
  7. AfterEach注解的方法开始执行
  8. 结束

3.4 @Disable

在测试用例上注释Disable,禁用此测试用例

  1. @Test
  2. @Disabled
  3. void Test02() {
  4. System.out.println("这是测试用例二");
  5. }
  6. //执行结果
  7. void org.Junit.TestJunit.Test02() is @Disabled

四、测试用例执行顺序

测试用例的执行顺序不是按照代码写的顺序执行的,是按照默认顺序执行的

1)如何按照指定的顺序运行

在类上注释@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

之后在每个测试用例上自定义顺序@Order(n)

  1. @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
  2. public class Test1 {
  3. @Order(4)
  4. @Test
  5. void Test04() {
  6. System.out.println("===============这是第四条测试用例===========");
  7. }
  8. @Order(2)
  9. @Test
  10. @Disabled
  11. void Test02() {
  12. System.out.println("===============这是第二条测试用例===========");
  13. }
  14. @Order(3)
  15. @Test
  16. void Test03() {
  17. System.out.println("===============这是第三条测试用例===========");
  18. }
  19. @Order(1)
  20. @Test
  21. void Test01() {
  22. System.out.println("==========这是第一条测试用例===========");
  23. }
  24. }

2)按照ASCII顺序执行

在类上注释@TestMethodOrder(MethodOrderer.Alphanumeric.class)

之后会按照测试用例方法名在ASCII表上的顺序去执行

五、断言

判断测试用例是否通过

使用Assertions下的方法

5.1 断言相等、断言不相等

Assertions.assertEquals(预期结果,实际结果);   ---断言相等
Assertions.assertNotEquals(预期结果,实际结果);   ---断言不相等
  1. @Test
  2. void Test01() {
  3. System.out.println("这是测试用例一");
  4. String str1 = "abc";
  5. String str2 = "abd";
  6. Assertions.assertEquals(str1,str2);
  7. }
  8. //执行结果
  9. org.opentest4j.AssertionFailedError:
  10. Expected :abc
  11. Actual :abd

5.2 断言为空、断言不为空        

Assertions.assertNull(a);  ---断言为空

Assertions.assertNotNull(a);  ---断言不为空

六、参数化

6.1 单参数

  1. @ParameterizedTest
  2. @ValueSource(strings = {"abc", "你好"})
  3. void paramTest(String str){
  4. System.out.println(str);
  5. }

6.2 多参数

1) 通过CsvSource获取数据

  1. @ParameterizedTest
  2. @CsvSource(value = {"小明,18", "小张,17"})
  3. void paramTest2(String name, int age) {
  4. System.out.println("name :" + name + ",age :" + age);
  5. }

2)通过CsvFileSource文件获取数据

当数据量过大时,就不适合用上面的方式

在对应的resource目录下创建对应的csv文件,在内部写入数据

  1. @ParameterizedTest
  2. @CsvFileSource(resources = "test.csv")
  3. void paramTest3(int age,String name) {
  4. System.out.println("name :" + name + ", age :" + age);
  5. }

3)通过方法获取数据

如果数据需要随时去获取的时候

  1. public static Stream<Arguments> Generator() {
  2. return Stream.of(
  3. Arguments.arguments(1,"甲"),
  4. Arguments.arguments(2,"乙"),
  5. Arguments.arguments(3,"丙")
  6. );
  7. }
  8. //多参数3 --通过方法获取数据
  9. @ParameterizedTest
  10. @MethodSource("Generator")
  11. void paramTest4(int age,String name) {
  12. System.out.println("name :" + name + ", age :" + age);
  13. }

七、测试套件

控制器,控制哪个类的测试用例或者包下的测试用例去运行

1)按照Class执行,想要执行哪些类下的测试用例,就写在value后面

  1. //按照类
  2. @Suite
  3. @SelectClasses(value = {TestJunit.class})
  4. public class testController {
  5. }

2)按照包执行

  1. //按照包
  2. @Suite
  3. @SelectPackages(value = {"org.Junit"})
  4. public class testController {
  5. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/68453
推荐阅读
相关标签
  

闽ICP备14008679号