Maison  >  Article  >  développement back-end  >  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
DDDoriginal
2024-10-24 14:20:02839parcourir

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>

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>

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>

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>

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!

Déclaration:
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