Android 单元测试Truth的使用

本文介绍了Truth,一个用于Android单元测试的开源框架,详细阐述了如何使用它进行标准Java、Java 8以及Guava类型的断言,包括对象、整数、浮点数、布尔值、字符串、数组、迭代器、Map、异常、可选和流的断言方法,并给出了自定义失败消息和标签的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

2. Maven依赖

3.简介

4.入门

5.标准的Java断言

5.1。对象断言

5.2。整数,浮点和双断言

5.3。大十进制断言

5.4。布尔断言

5.5。字符串断言

5.6。数组断言

5.7。可比断言

5.8。迭代断言

5.9。Map断言

5.10。异常断言

5.11。类断言

6. Java 8断言

6.1。可选断言

6.2。流断言

7.Guava断言

7.1。可选断言

7.2。多Map断言

7.3。多集断言

7.4。表断言

8.自定义失败消息和标签

9.扩展

10.结论


1.概述

Truth是一种流畅,灵活的开源测试框架,旨在使测试断言和失败消息更具可读性。

在本文中,我们将探索Truth框架的关键功能,并通过示例来展示其功能。

2. Maven依赖

首先,我们需要将添加TruthTruth-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 

dependencies {
    androidTestImplementation 'com.google.truth:truth:1.0'
}
   

 

您可以在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实例的相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值