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



本文分享在编写测试中“断言、假设、使测试失效”三节内容的方法。
断言
重要性:★☆☆☆☆
在四阶段测试模式的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
状态。
假设的典型应用场景是:当一个测试方法继续执行没有意义的时候——例如,测试所依赖的环境条件不满足时——终止测试的继续执行。
下面是代码示例:
使测试失效
重要性:★★★★☆
通过@Disabled注解使测试临时失效。测试方法被直接忽略,不再参与测试执行。
@Disabled可以注解在测试类上,也可以注解在测试方法上。如果注解在测试类上,整个测试类都将被忽略。如果注解在测试方法上,只有这个测试方法会被忽略掉。
下面是代码示例:
在添加@Disabled
注解时最好像上面代码示例一样,提供失效这个测试的理由。
这一节就讲到这里,下一节我们讲讲"有条件执行测试"。


版权声明: 本文为 InfoQ 作者【编程道与术】的原创文章。
原文链接:【http://xie.infoq.cn/article/74217d7127faca09958bfa8da】。文章转载请联系作者。
评论