偽のクライアントを使用して Client-Go コードをテストするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-24 14:14:30
オリジナル
388 人が閲覧しました

How to Test Client-Go Code with a Fake Client?

偽のクライアントを使用した Client-Go コードのテスト

問題ステートメント

GetNamespaceCreationTime 関数の実装中に、包括的な単体テストを作成する際に課題が発生しました。 GetNamespaceCreationTime 関数は、Kubernetes API サーバーと対話して、名前空間の詳細を取得します。このため、実際の API インタラクションに依存せずに分離されたテストを作成することが困難になりました。

偽クライアントを使用した解決策

client-go ライブラリの偽パッケージは、次のような偽クライアントを作成する方法を提供します。テスト目的で使用されます。これらの偽のクライアントは、実際のクライアントの動作を模倣しますが、制御された環境で動作します。

この場合、偽のパッケージの NewSimpleClientset 関数を使用して、偽の Kubernetes クライアントを作成できます。このクライアントを使用すると、単体テストで実際のクライアントを置き換えることができ、コードの動作を分離してテスト ロジックに集中できます。

テスト実装

GetNamespaceCreationTime 関数をテストするにはでは、次のようにテスト ケースを作成できます:

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

  // Inject mock Namespace data into the fake client
  nsMock := fakeClient.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)
  }
}
ログイン後にコピー

このテストでは、実際の Kubernetes クライアントを置き換える偽のクライアントを作成します。次に、偽の名前空間データを偽のクライアントに挿入します。これにより、名前空間の作成時間を取得するときに API サーバーから期待される応答をシミュレートできます。その後、GetNamespaceCreationTime 関数の出力が期待値と一致することをアサートできます。

偽のクライアントを使用する利点

単体テストで偽のクライアントを使用すると、次のような利点があります。

  • 分離: 外部リソースとの相互作用によって引き起こされる潜在的な副作用からテスト コードを分離します。
  • 速度: 偽のクライアントを使用した単体テストははるかに高速に実行されます。
  • 決定性: 偽のクライアントの動作はテスト コードによって制御されるため、一貫性のある予測可能な結果が保証されます。

以上が偽のクライアントを使用して Client-Go コードをテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!