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