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 类作为它的参数传递给构造函数。
我们使用 junit 的 assertEquals() 方法测试 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");
    }
  }
}
输出:

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