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 org.junit.Test;
import testexample.services.Service;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
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