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