Truth:一个流畅的断言框架

作者: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断言可以(且经常)并存于测试中。
AssertJ 是 JAVA流畅断言库。示例代码:// unique entry point to get access to all assertThat methods and utility methods (e.g. entry) import static org.assertj.core.api.Assertions.*;  // common assertions assertThat(frodo.getName()).isEqualTo("Frodo"); assertThat(frodo).isNotEqualTo(sauron)                  .isIn(fellowshipOfTheRing);  // String specific assertions assertThat(frodo.getName()).startsWith("Fro")                            .endsWith("do")                            .isEqualToIgnoringCase("frodo");  // collection specific assertions assertThat(fellowshipOfTheRing).hasSize(9)                                .contains(frodo, sam)                                .doesNotContain(sauron);  // using extracting magical feature to check fellowshipOfTheRing characters name :) assertThat(fellowshipOfTheRing).extracting("name").contains("Boromir", "Gandalf", "Frodo", "Legolas")                                                   .doesNotContain("Sauron", "Elrond");  // map specific assertions, ringBearers initialized with the elves rings and the one ring bearers. assertThat(ringBearers).hasSize(4)                        .contains(entry(oneRing, frodo), entry(nenya, galadriel))                        .doesNotContainEntry(oneRing, aragorn);  // and many more assertions : dates, file, numbers, exceptions ... 标签:AssertJ
### 回答1: 这是一个在 Python 中使用 Matplotlib 库绘制图像的函数。其中 example_data[i][0] 是要绘制的图像数据,cmap 指定了颜色映射方式为灰度图,interpolation 指定了插值方式。plt.title 函数用于设置图像的标题,其中 example_targets[i] 是标题中的文本数据。 ### 回答2: plt.imshow(example_data[i][0], cmap='gray', interpolation='none')是一段用于显示图像的代码。其中,example_data是一个表示图像数据集的变量,i表示要显示的图像的索引。[i][0]表示取出该图像的第一个通道(灰度图像只有一个通道)。 cmap='gray'是将图像以灰度的方式显示出来,使得图像呈现黑白效果。 interpolation='none'表示不对图像进行插值处理,即不进行图像的放缩和平滑处理,保持原始图像的像素。 plt.title("Ground Truth: {}".format(example_targets[i]))是一段用于显示图像标题的代码。其中,example_targets是一个与图像数据集对应的目标变量,i表示要显示的图像的索引。 "Ground Truth: {}".format(example_targets[i])是一个格式化字符串,将example_targets中第i个目标值插入到字符串中,作为图像标题。 总结起来,以上代码段的作用是在图像上显示灰度图像并给图像添加一个标题,标题内容为该图像对应的目标值。 ### 回答3: 这段代码的作用是用灰度色彩映射将example_data[i][0]中的图像显示出来,interpolation='none'表示不使用插值算法来平滑图像。plt.title("Ground Truth: {}".format(example_targets[i]))将该图像的标题设置为"Ground Truth: "后面跟着example_targets[i]的值。 这段代码的效果是显示example_data[i][0]中的图像,并在图像上方显示标题。该标题是以"Ground Truth: "开头,冒号后面跟着example_targets[i]的值。这样的标题可以用来标识该图像的真实标签或类别。 需要注意的是,example_data[i][0]应该是一个代表图像的数组或矩阵,通过指定cmap='gray'可以将其显示为灰度图像。而example_targets[i]应该是图片的真实标签或类别,它会被添加到标题中以提供额外的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值