「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 偽のクライアントを使用して Client-Go コードをテストするにはどうすればよいですか?

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

2024 年 11 月 8 日に公開
ブラウズ:125

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 関数の出力が期待値と一致することをアサートできます。

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

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

  • Isolation: 外部リソースとの相互作用によって引き起こされる潜在的な副作用からテスト コードを分離します。
  • Speed: 偽のクライアントを使用した単体テストの実行が大幅に速くなります。
  • 決定性: 偽のクライアントの動作はテスト コードによって制御されるため、一貫性のある予測可能な結果が保証されます。
リリースステートメント この記事は、侵害がある場合は1729745001に再現されています。勉強[email protected]に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3