JUnit 5 -- 单元测试

官网:https://junit.org
历史:1997年 Erich Gamma 和 Kent Beck 单元测试框架 JUnit

assert:断言,用来测试方法
assume:假设,用来验证变量

JUnit 应用组成

1、配置Maven依赖


  org.junit.platform
  junit-platform-launcher
  1.3.1
  test


  org.junit.jupiter    
  junit-jupiter-engine
  5.3.1
  test


    org.junit.jupiter   
    junit-jupiter-params
    5.3.1
    test


  org.junit.vintage
  junit-vintage-engine
  5.3.1
  test

2、测试类
在 src/test/java下新建包 和 测试类

@DisplayName("test class name")  // 在测试报告中显示的名称,默认为类名
public class MyTest {
    @Test   // 声明为测试方法
    @Disabled  // 可以禁用一个测试方法
    @EnabledOnOs({ LINUX, MAC })  // 指定操作系统生效
    @DisabledOnOs(WINDOWS)  // 指定操作系统失效
    @EnabledOnJre(JAVA_8)  // 指定JRE生效
    @BeforeEach    // 在每个其他测试方法执行前都会执行这个方法,另有@AfterEach
    void myFirstTest() {
        assertEquals(2, 1+1);  // 相等断言
        assertEquals(4, 3, "wrong");  // 断言失败时,显示的错误信息
        assertTrue('b' < 'b', () -> "wrong 1"  + "wong 2"); // 断言真,用lambda表达式提供错误信息
        assertAll("wong", () -> assertEquals("John", "John"), () -> assertEquals("Doe", "dd"); // 断言全部通过,第一个参数为错误信息
        assertNotNull("notnull");  // 断言非空
        assertTimeout(java.time.Duration.ofMinutes(2), () -> {  }); // 断言{}内的代码在2分钟内执行返回
        assertTimeoutPreemptively(java.time.Duration.ofMinutes(2), () -> {  }); // 2分钟后断言,不等方法返回
        assertThrows(IllegalArgumentException.class, () -> { });  // 断言{}抛出一个IllegalArgumentException
       
        assumeTrue(1==2); // 假设真
        assumingThat(1==1, () -> {    }); // 假设为真,才执行lambda表达式
    }

    @BeforeAll // 用于修饰静态方法,这个类中最先执行这个测试方法,另有 @AfterAll
    static void mySecondTest(){
    }

    @Nested    // 嵌套
    class WhenNew {
        @RepeatedTest(10)  // 重复测试10次
        static void isEmpty() {
            assertTrue(true);
        }
        @ParameterizedTest  // 传参测试
        @ValueSource(strings = { "1", "2", "3" })  // 参数的取值范围
        void palindromes(String param) {
            assertTrue(param.equals("1"));
        }

        @ParameterizedTest
        @CsvSource({ "foo, 1", "bar, 2", "baz, 3" })  // 多个参数
        void palindromes(String param1, int param2) {
            assertTrue(param2 == 1);
        }
    }
}

3、运行测试
测试类右键 -> Run

整合Spring

1、配置Maven依赖


  org.springframework
  spring-test
  5.1.0.RELEASE
  test

2、测试类

@ExtendWith(SpringExtension.class)    // 使用Spring扩展
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringTest {
    @Autowired            // 自动注入
    private CityServiceImpl service;
    @Test
    void myFirstTest() {
        assertNotNull(service);
    }
}

整合Maven

1、新增Maven插件


  org.apache.maven.plugins
  maven-surefire-plugin
  2.22.0

2、正确命名测试类
识别的测试类:/Test.java、/Test.java、/TestCase.java
排除的测试类:
/AbstractTest.java、*/AbstractTestCase.java
3、执行 mvn clean test

你可能感兴趣的:(JUnit 5 -- 单元测试)