美文网首页
初识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