」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用假客戶端為 Client-Go 建立簡單的測試?

如何使用假客戶端為 Client-Go 建立簡單的測試?

發佈於2024-11-13
瀏覽:640

How to Create Simple Tests for Client-Go Using a Fake Client?

如何使用假客戶端為Client-Go 編寫簡單測試

問題概述

在本例中,我們的目標是編寫一個測試函數GetNamespaceCreationTime 函數,用於檢索特定Kubernetes 命名空間的建立時間戳記。然而,您很難找到合適的方法來合併初始化邏輯並與假客戶端互動。

測試實作

為了有效測試 GetNamespaceCreationTime 函數,初始化過程不應駐留在函數本身。相反,Kubernetes 用戶端介面應作為參數傳遞給該函數。

將 GetNamespaceCreationTime 函數中的現有程式碼替換為以下內容:

import (
  "fmt"
  "k8s.io/api/core/v1"
  metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  "time"
)

func GetNamespaceCreationTime(kubeClient kubernetes.Interface, namespace string) int64 {
  ns, err := kubeClient.CoreV1().Namespaces().Get(namespace, metav1.GetOptions{})
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%v \n", ns.CreationTimestamp)
  return ns.GetCreationTimestamp().Unix()
}

接下來定義一個取得客戶端集的函數:

func GetClientSet() kubernetes.Interface {
  config, err := rest.InClusterConfig()
  if err != nil {
    log.Warnf("Could not get in-cluster config: %s", err)
    return nil, err
  }

  client, err := kubernetes.NewForConfig(config)
  if err != nil {
    log.Warnf("Could not connect to in-cluster API server: %s", err)
    return nil, err
  }

  return client, err
}

測試函數

在 TestGetNamespaceCreationTime 函數中,實例化假客戶端並呼叫 GetNamespaceCreationTIme 方法:

func TestGetNamespaceCreationTime(t *testing.T) {
  kubeClient := fake.NewSimpleClientset()
  got := GetNamespaceCreationTime(kubeClient, "default")
  want := int64(1257894000)

  nsMock := config.CoreV1().Namespaces()
  nsMock.Create(&v1.Namespace{
    ObjectMeta: metav1.ObjectMeta{
      Name:              "default",
      CreationTimestamp: metav1.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC),
    },
  })

  if got != want {
    t.Errorf("got %q want %q", got, want)
  }
}

此測試可確保使用假客戶端準確地擷取「預設」命名空間的預期建立時間戳記。

其他可測試性增強

考慮引入模擬函數來增強程式碼的可測試性和靈活性,如:

func fakeGetInclusterConfig() (*rest.Config, error) {
  return nil, nil
}

func fakeGetInclusterConfigWithError() (*rest.Config, error) {
  return nil, errors.New("fake error getting in-cluster config")
}

這些方法支援更強大的測試場景,您可以在其中斷言成功和失敗的叢集內配置檢索的行為。

版本聲明 本文轉載於:1729745300如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 如何使用不同單位的無單位 CSS 變數?
    如何使用不同單位的無單位 CSS 變數?
    如何靈活地使用無單位CSS 變數無單位CSS 變數提供了儲存數值的能力,這些數值可以在整個樣式表中方便使用。然而,可能會出現這樣的情況:您希望在不同的上下文中使用相同的變量,需要不同的單位,例如百分比或像素。 這種困境的一個例子是設定一個值為 10 的 CSS 變量,但是需要在一個實例中將其用作百分...
    程式設計 發佈於2024-11-18
  • 當 #await 區塊在 Svelte(Kit) 中解析時執行函數
    當 #await 區塊在 Svelte(Kit) 中解析時執行函數
    跳至内容: 关于 svelte 中的 #await 块 当 #await 块解析或拒绝时运行(触发)函数 修复浏览器中显示的未定义或任何返回的文本 1. 方法一(返回空字符串): 2. 方法二(用CSS隐藏UI中函数返回的文本。) PS:需要雇用 SvelteKit 开发人员吗?联系我 ...
    程式設計 發佈於2024-11-18
  • 一個 Java 檔案中可以有多個類別嗎?
    一個 Java 檔案中可以有多個類別嗎?
    Java 檔案中的多個類別在 Java 中,單一 .java 檔案中可以有多個類別。不過,公共頂級類別只能有一個,而且必須與原始檔案同名。 一個文件中有多個類別的目的是為了組織邏輯上相關的程式碼。這些類別通常包括公共頂級類別的支援功能,例​​如內部資料結構或實用方法。透過將它們捆綁在一起,您可以將相...
    程式設計 發佈於2024-11-18
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-18
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-18
  • 如何有效測試PDO資料庫連線並處理錯誤?
    如何有效測試PDO資料庫連線並處理錯誤?
    測試PDO資料庫連線開發資料庫安裝時,確保資料庫連線的有效性至關重要。當嘗試建立預設設定時,這一點變得尤為重要。 PDO(PHP 資料物件)提供了一種測試有效和無效連接的有效方法。 驗證連線若要使用PDO 連線至MySQL 資料庫,語法為:$dbh = new pdo('mysql:host=127...
    程式設計 發佈於2024-11-18
  • 當現有值相同時,MySQL 更新查詢是否會覆寫它們?
    當現有值相同時,MySQL 更新查詢是否會覆寫它們?
    MySQL更新查詢:覆寫現有值在MySQL中,更新表時,可能會遇到這樣的情況:為列指定的新值是與其目前值相同。在這種情況下,自然會出現一個問題:MySQL 會覆寫現有值還是完全忽略更新? UPDATE 語句的 MySQL 文件提供了答案:如果將列設定為它目前的值,MySQL 會注意到這一點並且不會更...
    程式設計 發佈於2024-11-18
  • 為什麼 `std::atomic` 的儲存使用 XCHG 來實現 x86 上的順序一致性?
    為什麼 `std::atomic` 的儲存使用 XCHG 來實現 x86 上的順序一致性?
    為什麼std::atomic 的儲存採用XCHG 來實現順序一致性在x86 和x86_64 架構的std::atomic 上下文中,a具有​​順序一致性的儲存操作(std::memory_order_seq_cst) 使用XCHG而不是具有內存屏障的簡單存儲作為實現順序釋放語義的技術。 順序一致性和...
    程式設計 發佈於2024-11-18
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-18
  • 為什麼 C++ 不直接支援從函數傳回數組?
    為什麼 C++ 不直接支援從函數傳回數組?
    為什麼C 不贊成陣列返回函數C 景觀與Java 等語言相反,C 不支援陣列返回函數不為傳回數組的函數提供直接支援。雖然可以返回數組,但過程很麻煩。這引發了有關此設計決策背後的根本原因的問題。 C 中的陣列機制要理解這一點,我們必須深入研究 C 中陣列的基礎知識。 C,陣列名稱代表記憶體位址,而非陣列...
    程式設計 發佈於2024-11-18
  • 好的,以下是一些適合文章內容的標題:

* How to Fix the \"-lGL: not found\" Error in Qt
* Qt Compilation Error: \"-lGL: not found\" - What to Do
* Troubleshooting \"-lGL: not found\" Error in Qt Projects
* Resolving the
    好的,以下是一些適合文章內容的標題: * How to Fix the \"-lGL: not found\" Error in Qt * Qt Compilation Error: \"-lGL: not found\" - What to Do * Troubleshooting \"-lGL: not found\" Error in Qt Projects * Resolving the
    解決Qt 中的「-lGL:未找到」錯誤當嘗試在QtCreator 中編譯新建立的專案時,某些使用者可能會和遇到“-lGL:未找到”錯誤。出現此錯誤通常是因為未安裝必要的依賴項。 要解決此問題,請按照以下步驟操作: libgl1-mesa-dev: 該軟體包包含在 Qt 專案中支援 OpenGL 所需...
    程式設計 發佈於2024-11-18
  • PHP 的「eval」函數使用起來安全嗎?
    PHP 的「eval」函數使用起來安全嗎?
    什麼時候 eval 不是邪惡的? 雖然 PHP 的 eval 函數經常被勸阻,但它在 PHP 5.3 中的實用性值得商榷。儘管出現了LSB 和閉包,但以下是一些可以想像的用例,其中eval 可能仍然是首選:評估安全表達式:Eval 可用於評估數值或PHP 程式碼的其他特定子集,例如簡單的數學表達式,...
    程式設計 發佈於2024-11-18
  • 如何在 Go 中使用動態屬性解組 XML?
    如何在 Go 中使用動態屬性解組 XML?
    Golang:使用動態屬性解組XML簡介:在Go 中,encoding/xml提供了處理XML 資料的高效且通用的方法。然而,在處理具有動態屬性的 XML 元素時,由於存在未知數量和類型的屬性,解組變得具有挑戰性。 問題:如何使用以下方法解組 XML 標籤:當你沒有預料到會遇到的確切屬性時,如何在 ...
    程式設計 發佈於2024-11-18
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-18
  • C++中可以直接初始化類別資料成員嗎?
    C++中可以直接初始化類別資料成員嗎?
    類別資料成員可以直接初始化嗎? 在 C 中,類別資料成員不能使用直接初始化語法 () 來初始化,如下例所示:#include <iostream> class test { public: void fun() { int a(3); std::c...
    程式設計 發佈於2024-11-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3