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.
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>
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.
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!