«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как создать простые тесты для Client-Go, используя поддельный клиент?

Как создать простые тесты для Client-Go, используя поддельный клиент?

Опубликовано 13 ноября 2024 г.
Просматривать:174

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

Как написать простые тесты для Client-Go с использованием поддельного клиента

Обзор проблемы

В этом случае мы стремимся составить тестовую функцию для функции GetNamespaceCreationTime, которая предназначена для получения отметки времени создания для определенного пространства имен Kubernetes. Однако вы сталкиваетесь с трудностями при поиске подходящего подхода для включения логики инициализации и взаимодействия с поддельным клиентом.

Тестовая реализация

Чтобы эффективно протестировать функцию GetNamespaceCreationTime, процесс инициализации не должен находиться внутри сама функция. Вместо этого клиентский интерфейс Kubernetes должен быть передан в качестве параметра функции.

Замените существующий код в функции GetNamespaceCreationTime следующим:

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

Далее определите функцию для получения набора клиентов:

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
}

Тестовая функция

В функции TestGetNamespaceCreationTime создайте экземпляр поддельного клиента и вызовите метод GetNamespaceCreationTIme:

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

Этот тест гарантирует, что ожидаемая временная метка создания для пространства имен «по умолчанию» точно получена с использованием поддельного клиента.

Дополнительные улучшения тестируемости

Рассмотрите возможность введения фиктивных функций для улучшения тестируемость и гибкость кода, например:

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

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

Эти методы позволяют создавать более надежные сценарии тестирования, в которых вы можете утверждать поведение как для успешного, так и для неудачного получения конфигурации в кластере.

Заявление о выпуске Эта статья перепечатана по адресу: 1729745300. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3