Truth:一个流畅的断言框架

来源:互联网 发布:网易uu打不开修复网络 编辑:程序博客网 时间:2024/04/28 02:54

作者:Dori Reuveni 、Kurt Alfred Kluever

原文链接:http://googletesting.blogspot.tw/2014/12/testing-on-toilet-truth-fluent.html


为工程师,我们花费大部分的时间来阅读现有的代码,而不是编写新的代码。因此,我们必须确保我们写的代码是清晰的、可读的。这同样适用于我们的测试;我们需要一种方法来清楚的表达我们的测试断言。

Truth是一个开源的、流畅的Java测试框架,使你的测试断言和失败消息更有可读性。通过自动编译,流畅的API使读(和写)测试断言在你的开发环境中更加自然、散文化和易发现。例如,比较JUnit和Truth是如何读以下断言的:

assertEquals("March", monthMap.get(3));         // JUnit
assertThat(monthMap).containsEntry(3, "March");  // Truth

这两个语句都断言一样的对象,但是由Truth编写的断言很容易从左到右读取,而由Junit编写的例子需要“精神回溯”。

相比于JUnit,Truth的另一个优点是增加有用的默认失败消息例如:

ImmutableSet<String> colors = ImmutableSet.of("red", "green", "blue", "yellow");
assertTrue(colors.contains("orange"));  // JUnit
assertThat(colors).contains("orange");  // Truth

在这个例子里,两个断言都将失败;但是JUnit将不会提供有用的错误信息然而,Truth可提供一个简明的错误信息

AssertionError:<[red, green, blue, yellow]> should have contained <orange>

Truth已经可以支持对多数常见JDK类型的专业断言(对象,基本类型,数组,字符串,类,可比较类型,可迭代类型,集合,列表,集合,图等),以及一些瓜娃类型(可选值)。另外,对于其他受欢迎类型的支持也在计划中(异常,迭代器,多重映射,无符号整型,无符号长整型等)。

Truth也是用户扩展型的:你可以很容易的写一个Truth主题,以对你自定义的类型进行流畅的断言。通过创建你自定义的主题,你的断言API和你的失败消息都可以是特定领域的。

Truth的目标不是取代JUnit断言,而是提高对复杂断言和失败消息的可读性。JUnit断言和Truth断言可以(且经常)并存于测试中。
0 0
原创粉丝点击