您的位置:首页 > 其它

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十五)编写测试-断言\假设\使测试失效

2020-06-02 16:45 169 查看



本文分享在编写测试中“断言、假设、使测试失效”三节内容的方法。

断言

重要性:★☆☆☆☆

在四阶段测试模式的

verify
阶段,我们通过各种断言证明测试的结果——方法的返回值、SUT状态的变更、对外部依赖类的调用、对数据库、文件系统造成的变更、抛出的异常等等——符合我们的预期。例如断言被测试的加法器计算2 + 2的结果是4。

JUnit Jupiter本身定义了大量的断言,全部以org.junit.jupiter.api.Assertions类上的静态方法的形式存在,如

assertEquals
assertTrue
assertFalse
assertNull
assertNotNull
assertThrows
assertTimeout
assertTimeoutPreemptively
等等。

但是在单元测试领域有很多更加好用的断言库,其中最有名的是

AssertJ
,这也是本教程后面章节重点推介的断言库。建议直接使用
AssertJ
,放弃JUnit Jupiter自带的断言。

假设(Assumptions)

重要性:★★★☆☆

从JUnit 4开始在测试中支持假设

Assumptions
。JUnit Jupiter的假设都是
org.junit.jupiter.api.Assumptions
类的静态方法。

当假设

assumption
失败时,余下的测试内容会终止执行,测试被标识为
aborted
状态(而不是失败
failed
),直接终止。与断言失败不同,当断言
assertion
失败时,测试会被认定为失败
failed
状态。

假设的典型应用场景是:当一个测试方法继续执行没有意义的时候——例如,测试所依赖的环境条件不满足时——终止测试的继续执行。

下面是代码示例:

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import static org.junit.jupiter.api.Assumptions.assumingThat;

import example.util.Calculator;

import org.junit.jupiter.api.Test;

class AssumptionsDemo {

private final Calculator calculator = new Calculator();

@Test
void testOnlyOnCiServer() {
assumeTrue("CI".equals(System.getenv("ENV")));
// remainder of test
}

@Test
void testOnlyOnDeveloperWorkstation() {
assumeTrue("DEV".equals(System.getenv("ENV")),
() -> "Aborting test: not on developer workstation");
// remainder of test
}

@Test
void testInAllEnvironments() {
assumingThat("CI".equals(System.getenv("ENV")),
() -> {
// perform these assertions only on the CI server
assertEquals(2, calculator.divide(4, 2));
});

// perform these assertions in all environments
assertEquals(42, calculator.multiply(6, 7));
}
}

使测试失效

重要性:★★★★☆

通过

@Disabled
注解使测试临时失效。测试方法被直接忽略,不再参与测试执行。

@Disabled
可以注解在测试类上,也可以注解在测试方法上。如果注解在测试类上,整个测试类都将被忽略。如果注解在测试方法上,只有这个测试方法会被忽略掉。

下面是代码示例:

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

class DisabledTestsDemo {

@Disabled("Disabled until bug #42 has been resolved")
@Test
void testWillBeSkipped() {
}

@Test
void testWillBeExecuted() {
}
}

在添加

@Disabled
注解时最好像上面代码示例一样,提供失效这个测试的理由。

这一节就讲到这里,下一节我们讲讲"有条件执行测试"。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: