Wie erstelle ich einfache Tests für Client-Go mit einem gefälschten Client?

DDD
Freigeben: 2024-10-24 14:20:02
Original
905 Leute haben es durchsucht

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

So schreiben Sie einfache Tests für Client-Go mit einem gefälschten Client

Problemübersicht

In diesem Fall möchten wir eine Testfunktion erstellen für die Funktion „GetNamespaceCreationTime“, die den Erstellungszeitstempel für einen bestimmten Kubernetes-Namespace abrufen soll. Es fällt Ihnen jedoch schwer, einen geeigneten Ansatz zu finden, um die Initialisierungslogik zu integrieren und mit dem gefälschten Client zu interagieren.

Testimplementierung

Um die GetNamespaceCreationTime-Funktion effektiv zu testen, sollte sich der Initialisierungsprozess nicht innerhalb der befinden Funktion selbst. Stattdessen sollte die Kubernetes-Clientschnittstelle als Parameter an die Funktion übergeben werden.

Ersetzen Sie den vorhandenen Code in der GetNamespaceCreationTime-Funktion durch Folgendes:

<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>
Nach dem Login kopieren

Als nächstes definieren Sie eine abzurufende Funktion der Client-Satz:

<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>
Nach dem Login kopieren

Testfunktion

Instanziieren Sie innerhalb der TestGetNamespaceCreationTime-Funktion den gefälschten Client und rufen Sie die GetNamespaceCreationTIme-Methode auf:

<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>
Nach dem Login kopieren

Dieser Test stellt sicher, dass die Der erwartete Erstellungszeitstempel für den „Standard“-Namespace wird mit dem gefälschten Client genau abgerufen.

Zusätzliche Verbesserungen der Testbarkeit

Erwägen Sie die Einführung von Scheinfunktionen, um die Testbarkeit und Flexibilität des Codes zu verbessern, wie zum Beispiel:

<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>
Nach dem Login kopieren

Diese Methoden ermöglichen robustere Testszenarien, in denen Sie Verhaltensweisen sowohl für den erfolgreichen als auch für den fehlgeschlagenen Abruf der Clusterkonfiguration festlegen können.

Das obige ist der detaillierte Inhalt vonWie erstelle ich einfache Tests für Client-Go mit einem gefälschten Client?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage