Maison > développement back-end > Golang > Comment créer des tests simples pour Client-Go à l'aide d'un faux client ?

Comment créer des tests simples pour Client-Go à l'aide d'un faux client ?

DDD
Libérer: 2024-10-24 14:20:02
original
934 Les gens l'ont consulté

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

Comment écrire des tests simples pour Client-Go à l'aide d'un faux client

Aperçu du problème

Dans ce cas, nous visons à composer une fonction de test pour la fonction GetNamespaceCreationTime, qui est destinée à récupérer l'horodatage de création pour un espace de noms Kubernetes particulier. Cependant, vous rencontrez des difficultés pour trouver une approche appropriée pour intégrer la logique d'initialisation et interagir avec le faux client.

Test d'implémentation

Pour tester efficacement la fonction GetNamespaceCreationTime, le processus d'initialisation ne doit pas résider dans le fonctionner lui-même. Au lieu de cela, l'interface client Kubernetes doit être passée en paramètre à la fonction.

Remplacez le code existant dans la fonction GetNamespaceCreationTime par ce qui suit :

<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>
Copier après la connexion

Ensuite, définissez une fonction pour obtenir l'ensemble du client :

<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>
Copier après la connexion

Fonction de test

Dans la fonction TestGetNamespaceCreationTime, instanciez le faux client et invoquez la méthode 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>
Copier après la connexion

Ce test garantit que le L'horodatage de création attendu pour l'espace de noms « par défaut » est récupéré avec précision à l'aide du faux client.

Améliorations supplémentaires de la testabilité

Envisagez d'introduire des fonctions fictives pour améliorer la testabilité et la flexibilité du code, telles que :

<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>
Copier après la connexion

Ces méthodes permettent des scénarios de tests plus robustes, dans lesquels vous pouvez affirmer des comportements pour une récupération de configuration dans le cluster réussie ou échouée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal