"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إنشاء اختبارات بسيطة لـ Client-Go باستخدام عميل مزيف؟

كيفية إنشاء اختبارات بسيطة لـ Client-Go باستخدام عميل مزيف؟

تم النشر بتاريخ 2024-11-13
تصفح:189

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