美文网首页
JUnit 5 -- 单元测试

JUnit 5 -- 单元测试

作者: saoraozhe3hao | 来源:发表于2018-09-20 10:00 被阅读0次

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

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

JUnit 应用组成

1、配置Maven依赖

<dependency>
  <groupId>org.junit.platform</groupId>
  <artifactId>junit-platform-launcher</artifactId>
  <version>1.3.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.junit.jupiter</groupId>    <!-- 提供assertEquals等断言方法、@Test等测试注解 -->
  <artifactId>junit-jupiter-engine</artifactId>
  <version>5.3.1</version>
  <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>   <!-- 提供@ParameterizedTest、@ValueSource、@CsvSource等 -->
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.3.1</version>
    <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.junit.vintage</groupId>
  <artifactId>junit-vintage-engine</artifactId>
  <version>5.3.1</version>
  <scope>test</scope>
</dependency>

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依赖

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>5.1.0.RELEASE</version>
  <scope>test</scope>
</dependency>

2、测试类

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

整合Maven

1、新增Maven插件

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.22.0</version>
</plugin>

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

相关文章

网友评论

      本文标题:JUnit 5 -- 单元测试

      本文链接:https://www.haomeiwen.com/subject/iusgnftx.html