概述
1.概述
Truth是一种流畅,灵活的开源测试框架,旨在使测试断言和失败消息更具可读性。
在本文中,我们将探索Truth框架的关键功能,并通过示例来展示其功能。
2. Maven依赖
首先,我们需要将添加Truth和Truth-java8扩展到我们的pom.xml:
1 2 3 4 5 6 7 8 9 10 11 |
<dependency> <groupId>com.google.truth</groupId> <artifactId>truth</artifactId> <version>0.32</version> </dependency> <dependency> <groupId>com.google.truth.extensions</groupId> <artifactId>truth-java8-extension</artifactId> <version>0.32</version> <scope>test</scope> </dependency>
或者项目工程下build.gradle |
您可以在Maven Central上找到Truth和Truth-java8-extension的最新版本。
3.简介
Truth允许我们为各种类编写可读的断言和失败消息:
-
标准Java –基元,数组,字符串,对象,集合,可抛出对象,类等。
-
Java 8 – 可选和Stream实例
-
番石榴 – 可选,Multimap,Multiset和Table对象
-
自定义类型 –通过扩展Subject类,我们将在后面看到
通过Truth和Truth8类,该库提供了实用的方法,可用于编写对主题(即被测试的值或对象)起作用的断言。
一旦知道了该主题,真相就可以在编译时推断该主题已知的命题。这使它可以返回围绕我们的值的包装器,这些包装器声明特定于该特定主题的命题方法。
例如,在对列表进行断言时,Truth返回IterableSubject实例,该实例定义诸如contains()和containsAnyOf()等方法。在Map上声明时,它返回一个MapSubject,该方法声明诸如containsEntry()和containsKey()之类的方法。
4.入门
要开始编写断言,让我们首先导入Truth的入口点:
1 2 |
import static com.google.common.truth.Truth.*; import static com.google.common.truth.Truth8.*; |
现在,让我们编写一个简单的类,在下面的一些示例中将使用它们:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class User { private String name = "John Doe"; private List<String> emails = Arrays.asList("contact@baeldung.com", "staff@baeldung.com");
public boolean equals(Object obj) { if (obj == null || getClass() != obj.getClass()) { return false; }
User other = (User) obj; return Objects.equals(this.name, other.name); }
// standard constructors, getters and setters } |
注意自定义的equals()方法,在该方法中,我们声明两个User对象(如果它们的名称相同)是相等的。
5.标准的Java断言
在本节中,我们将看到有关如何为标准Java类型编写测试断言的详细示例。
5.1。对象断言
真相提供了主题包装器,用于对对象执行断言。Subject也是库中所有其他包装器的父级,并声明用于确定Object(在我们的情况下为User)是否等于另一个对象的方法:
1 2 3 4 5 6 7 |
@Test public void whenComparingUsers_thenEqual() { User aUser = new User("John Doe"); User anotherUser = new User("John Doe");
assertThat(aUser).isEqualTo(anotherUser); } |
或等于列表中的给定对象:
1 2 3 4 5 6 |
@Test public void whenComparingUser_thenInList() { User aUser = new User();
assertThat(aUser).isIn(Arrays.asList(1, 3, aUser, null)); } |
或如果不是:
1 2 3 4 5 6 |
@Test public void whenComparingUser_thenNotInList() { // ...
assertThat(aUser).isNotIn(Arrays.asList(1, 3, "Three")); } |
是否为null:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@Test public void whenComparingUser_thenIsNull() { User aUser = null;
assertThat(aUser).isNull(); }
@Test public void whenComparingUser_thenNotNull() { User aUser = new User();
assertThat(aUser).isNotNull(); } |
或者它是特定类的实例:
1 2 3 4 5 6 |
@Test public void whenComparingUser_thenInstanceOf() { // ...
assertThat(aUser).isInstanceOf(User.class); } |
Subject类中还有其他断言方法。要发现所有内容,请参阅主题文档。
在以下各节中,我们将重点介绍 Truth支持的每种特定类型的最相关方法。但是,请记住,Subject类中的所有方法也可以应用。
5.2。整数,浮点和双断言
可以比较Integer,Float和Double实例的相等