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

DDD
Lepaskan: 2024-10-24 14:20:02
asal
904 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan