„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie erstelle ich einfache Tests für Client-Go mit einem gefälschten Client?

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

Veröffentlicht am 13.11.2024
Durchsuche:360

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:

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()
}

Als nächstes definieren Sie eine Funktion, um den Client-Satz abzurufen:

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
}

Testfunktion

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

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)
  }
}

Dieser Test stellt sicher, dass der erwartete Erstellungszeitstempel für den „Standard“-Namespace mithilfe des gefälschten Clients genau abgerufen wird.

Zusätzliche Verbesserungen der Testbarkeit

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

func fakeGetInclusterConfig() (*rest.Config, error) {
  return nil, nil
}

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

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

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729745300 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3