作者: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断言可以(且经常)并存于测试中。