Java 中的 stub

Rupam Yadav 2024年2月15日
Java 中的 stub

本教程教我们如何创建和使用作为测试通用部分的 stub,也称为测试替身。在下面的示例中,我们将完成仅使用 JUnit 编写测试 stub 的步骤。

在 Java 中使用 JUnit 测试 Stub

stub 是我们在单元测试中使用的类或对象,用于在生产时返回类似于函数数据的假数据。这方面的一个例子可以是对提供一些数据作为响应的 API 的调用,但是当我们使用测试 stub 时,我们会对数据进行硬编码以对其进行测试。

下面是一个创建假场景以进行测试的示例,在该示例中我们测试了一个方法,该方法返回一个包含以特定字符开头的客户名称的列表。

我们为此示例创建了一个接口和两个类。Service 是一个带有函数 getCustomers() 的接口,它返回字符串类型的列表。

Service.java

import java.util.List;

public interface Service {
  List<String> getCustomers();
}

我们创建了一个类 JavaExample,它实现了返回数据的实际代码。我们在类中创建一个 Service 接口的实例,然后在构造函数中对其进行初始化。

为了返回数据,我们创建了一个返回字符串类型列表的函数 getCustomersWhoseNamesStartsWithC()。在方法内部,我们初始化了一个名为 customers 的列表。

现在我们使用 service.getCustomers() 获取客户列表并遍历它以检查列表中的字符串是否包含字符 C,如果是,我们将该字符串添加到 customers 列表中。最后,我们返回列表。

JavaExample.java

import java.util.ArrayList;
import java.util.List;

public class JavaExample {
  Service service;

  public JavaExample(Service service) {
    this.service = service;
  }

  public List<String> getCustomersWhoseNamesStartsWithC() {
    List<String> customers = new ArrayList<>();
    for (String customerName : service.getCustomers()) {
      if (customerName.contains("C"))
        customers.add(customerName);
    }
    return customers;
  }
}

接下来,我们创建一个包含所有测试用例的类。在该类中,我们创建了一个名为 StubService 的 stub 类,它实现了 Service 接口,在该类中,我们使用 getCustomers() 方法创建了一个包含一些假名的列表 test 并返回它。

为了创建一个测试方法,我们创建了一个名为 whenCallServiceIsStubbed() 的方法并用@Test 注释它。在方法内部,我们创建了一个 JavaExample 类的对象,并将 StubService 类作为它的参数传递给构造函数。

我们使用 junitassertEquals() 方法测试 getCustomersWhoseNamesStartsWithC() 函数返回的结果。在第一个 assert 语句中,我们检查返回列表的大小,在第二个语句中,我们检查列表的第一项或名称是否为 Cathy

输出显示测试通过。

StubTestJava.java

import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import testexample.services.Service;

public class StubTestJava {
  @Test
  public void whenCallServiceIsStubbed() {
    JavaExample service = new JavaExample(new StubService());

    assertEquals(4, service.getCustomersWhoseNamesStartsWithC().size());
    assertEquals("Cathy", service.getCustomersWhoseNamesStartsWithC().get(0));
  }

  static class StubService implements Service {
    public List<String> getCustomers() {
      return Arrays.asList("Cathy", "Carla", "Kevin", "Denis", "Charles", "Caleb");
    }
  }
}

输出:

java stub

作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn