في هذه الحالة، نهدف إلى إنشاء وظيفة اختبار لوظيفة 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")
}
تسمح هذه الأساليب بسيناريوهات اختبار أكثر قوة، حيث يمكنك تأكيد السلوكيات لكل من عمليات استرداد التكوين داخل المجموعة الناجحة والفاشلة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3