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.
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>
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>
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>
Dieser Test stellt sicher, dass die Der erwartete Erstellungszeitstempel für den „Standard“-Namespace wird mit dem gefälschten Client genau abgerufen.
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>
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!