Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencipta Ujian Mudah untuk Client-Go Menggunakan Pelanggan Palsu?

Bagaimana untuk Mencipta Ujian Mudah untuk Client-Go Menggunakan Pelanggan Palsu?

DDD
DDDasal
2024-10-24 14:20:02839semak imbas

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

Cara Menulis Ujian Mudah untuk Client-Go Menggunakan Pelanggan Palsu

Tinjauan Keseluruhan Masalah

Dalam kes ini, kami berhasrat untuk mengarang fungsi ujian untuk fungsi GetNamespaceCreationTime, yang bertujuan untuk mendapatkan cap masa penciptaan untuk ruang nama Kubernetes tertentu. Walau bagaimanapun, anda menghadapi kesukaran mencari pendekatan yang sesuai untuk menggabungkan logik permulaan dan berinteraksi dengan klien palsu.

Pelaksanaan Ujian

Untuk menguji fungsi GetNamespaceCreationTime dengan berkesan, proses pemulaan tidak seharusnya berada dalam berfungsi sendiri. Sebaliknya, antara muka klien Kubernetes hendaklah dihantar sebagai parameter kepada fungsi.

Ganti kod sedia ada dalam fungsi GetNamespaceCreationTime dengan yang berikut:

<code class="go">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()
}</code>

Seterusnya, tentukan fungsi untuk mendapatkan set pelanggan:

<code class="go">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
}</code>

Fungsi Ujian

Dalam fungsi TestGetNamespaceCreationTime, nyatakan klien palsu dan gunakan kaedah GetNamespaceCreationTIme:

<code class="go">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)
  }
}</code>

Ujian ini memastikan bahawa cap masa penciptaan dijangka untuk ruang nama "lalai" diambil dengan tepat menggunakan klien palsu.

Peningkatan Kebolehujian Tambahan

Pertimbangkan untuk memperkenalkan fungsi olok-olok untuk meningkatkan kebolehujian dan fleksibiliti kod, seperti:

<code class="go">func fakeGetInclusterConfig() (*rest.Config, error) {
  return nil, nil
}

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

Kaedah ini membenarkan senario ujian yang lebih mantap, di mana anda boleh menegaskan gelagat untuk mendapatkan semula konfigurasi dalam kelompok yang berjaya dan gagal.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Ujian Mudah untuk Client-Go Menggunakan Pelanggan Palsu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn