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:
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
}
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.
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.
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