Contents

Hamcrest 文本匹配器简介

1. 概述

在本教程中,我们将探索 Hamcrest 文本匹配器。

在使用 Hamcrest 进行测试 之前,我们一般讨论了 Hamcrest 匹配器,在本教程中,我们将只关注文本匹配器。

2. Maven配置

首先,我们需要在pom.xml中添加以下依赖项:

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>java-hamcrest</artifactId>
    <version>2.0.0.0</version>
    <scope>test</scope>
</dependency>

可以从 Maven Central 下载最新版本的java-hamcrest

现在,我们将深入研究 Hamcrest 文本匹配器。

3. 文本相等匹配器

当然,我们可以使用标准的*isEqual()*匹配器检查两个字符串是否相等。

此外,我们有两个特定于String类型的匹配器:equalToIgnoringCase()equalToIgnoringWhiteSpace()

让我们检查两个String是否相等——忽略大小写:

@Test
public void whenTwoStringsAreEqual_thenCorrect() {
    String first = "hello";
    String second = "Hello";
    assertThat(first, equalToIgnoringCase(second));
}

我们还可以检查两个String是否相等——忽略前导和尾随空格:

@Test
public void whenTwoStringsAreEqualWithWhiteSpace_thenCorrect() {
    String first = "hello";
    String second = "   Hello   ";
    assertThat(first, equalToIgnoringWhiteSpace(second));
}

4. 空文本匹配器

我们可以通过使用blankString()blankOrNullString()匹配器来检查String是否为空,这意味着它只包含空格:

@Test
public void whenStringIsBlank_thenCorrect() {
    String first = "  ";
    String second = null;
    
    assertThat(first, blankString());
    assertThat(first, blankOrNullString());
    assertThat(second, blankOrNullString());
}

另一方面,如果我们想验证一个String是否为空,我们可以使用*emptyString()*匹配器:

@Test
public void whenStringIsEmpty_thenCorrect() {
    String first = "";
    String second = null;
    assertThat(first, emptyString());
    assertThat(first, emptyOrNullString());
    assertThat(second, emptyOrNullString());
}

5. 模式匹配器

我们还可以使用*matchesPattern()*函数检查给定文本是否与正则表达式匹配:

@Test
public void whenStringMatchPattern_thenCorrect() {
    String first = "hello";
    assertThat(first, matchesPattern("[a-z]+"));
}

6. 子字符串匹配器

我们可以使用*containsString()函数或containsStringIgnoringCase()*来确定一个文本是否包含另一个子文本:

@Test
public void whenVerifyStringContains_thenCorrect() {
    String first = "hello";
    assertThat(first, containsString("lo"));
    assertThat(first, containsStringIgnoringCase("EL"));
}

如果我们希望子字符串按特定顺序排列,我们可以调用*stringContainsInOrder()*匹配器:

@Test
public void whenVerifyStringContainsInOrder_thenCorrect() {
    String first = "hello";
    
    assertThat(first, stringContainsInOrder("e","l","o"));
}

接下来,让我们看看如何检查一个String是否以给定的String开头:

@Test
public void whenVerifyStringStartsWith_thenCorrect() {
    String first = "hello";
    assertThat(first, startsWith("he"));
    assertThat(first, startsWithIgnoringCase("HEL"));
}

最后,我们可以检查一个String是否以指定的String结尾:

@Test
public void whenVerifyStringEndsWith_thenCorrect() {
    String first = "hello";
    assertThat(first, endsWith("lo"));
    assertThat(first, endsWithIgnoringCase("LO"));
}