美文网首页
初识JUnit5

初识JUnit5

作者: lmlyuyu | 来源:发表于2018-09-22 17:35 被阅读0次

    1. 总览

    JUnit现在是Java最流行的测试框架之一,所以当它在今年2月发布最新JUnit5的Alpha版本的时候,在Java开发者社区也引起了极大的讨论。最新版Junit5引入了诸多创新与变革。文章接下来会简单介绍关于JUnit5的一些变更与新特性。

    2. 引入POM依赖

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.1.0</version>
        <scope>test</scope>
    </dependency>
    

    如果你不使用任何IDE,或者当前正在使用的IDE无法支持到JUnit5,也可以引入以下pom插件来提供支持:

    <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19.1</version>
        <dependencies>
            <dependency>
                <groupId>org.junit.platform</groupId>
                <artifactId>junit-platform-surefire-provider</artifactId>
                <version>1.0.2</version>
            </dependency>
        </dependencies>
    </plugin>
    

    需要特别注意一下的是JUnit5只支持Java8。
    同时当你创建一个测试类的时候,记得引入包 org.junit.jupiter.api.Test 而不是 org.junit.Test,而且在新版本中,测试方法不再必须要求是public的了。

    3. 新特性

    3.1. 断言 Assertion

    断言已经移动到了包org.junit.jupiter.api.Assertions中,得到到极大的升级,并且和Java8一道,提供对Lambda表达式的支持。如下事例:

    @Test
    void lambdaExpressions() {
        assertTrue(Stream.of(1, 2, 3)
          .stream()
          .mapToInt(i -> i)
          .sum() > 5, () -> "Sum should be greater than 5");
    }
    

    需要注意到Lambda的断言语句是(延迟)Lazy加载的,这对于那些需要花费资源进行构建的断言语句来说可以提高测试Case的执行性能。

    现在你也可以通过assertAll()来进行一组复数断言,MultipleFailuresError支持一组断言中返回失败的信息。这意味着你可以同时创建更为复杂的断言,并且能很快定位到错误。

    @Test
    void groupAssertions() {
        int[] numbers = {0, 1, 2, 3, 4};
        assertAll("numbers",
            () -> assertEquals(numbers[0], 1),
            () -> assertEquals(numbers[3], 3),
            () -> assertEquals(numbers[4], 1)
        );
    }
    

    3.2. 假设(Assumptions)

    有时候测试需要在满足某种条件的时候才被允许执行,一般是一些外部的条件用来保证测试的正常进行,而其本身并不会直接与被测试的数据关联的时候。
    你可以用assumeTrue(), assumeFalse(), and assumingThat().来声明假设。

    @Test
    void trueAssumption() {
        assumeTrue(5 > 1);
        assertEquals(5 + 2, 7);
    }
     
    @Test
    void falseAssumption() {
        assumeFalse(5 < 1);
        assertEquals(5 + 2, 7);
    }
     
    @Test
    void assumptionThat() {
        String someString = "Just a string";
        assumingThat(
            someString.equals("Just a string"),
            () -> assertEquals(2 + 2, 4)
        );
    }
    

    如果assumption没有被满足的时候,会抛出一个TestAbortedException异常并跳过该测试。如上例所示,assumption支持Lambda表达式。

    3.3. 异常(Exception)

    JUnit5增强了对异常测试的支持,新增assertThrows()语句来验证抛出特定类型的异常。

    @Test
    void shouldThrowException() {
        Throwable exception = assertThrows(UnsupportedOperationException.class, () -> {
          throw new UnsupportedOperationException("Not supported");
        });
        assertEquals(exception.getMessage(), "Not supported");
    }
    

    相关文章

      网友评论

          本文标题:初识JUnit5

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