2017-02-18 16 views
11

Git "test" paketini kullanıyorum. Testleri aşağıda olduğu gibi çalıştırıyorum.Her bir test için test kurulumu ve göz atması şu an

func TestMain(m *testing.M) { 

    ... 
    // Setup 
    os.Exit(m.Run()) 
    // Teardown 
} 

Bu, herhangi bir sınama çalıştırılmadan önce bir kurulum ve tüm sınamalar tamamlandıktan sonra bir teardown çalışacaktır. Ve buna ihtiyacım var, çünkü kurulum DB'yi ayarlıyor. Ama yine de, test başına bir kurulum/yırtıp çalıştırma için bir yol bulmaya ihtiyacım var. Çalıştığım birim testleri için, her testten önce DB'yi temizlemek istiyorum, böylece DB'nin içeriği ile ilgili beklenmedik davranışlara neden olan hiçbir sorun bulunmuyor.

cevap

11

Kare Nuorteva'dan "Go unit test setup and teardown" makalesinde gösterildiği gibi, ertelemek için bir teardown işlevi döndüren bir kurulum işlevi kullanabilirsiniz.

this gist bakınız:

func setupSubTest(t *testing.T) func(t *testing.T) { 
    t.Log("setup sub test") 
    return func(t *testing.T) { 
     t.Log("teardown sub test") 
    } 
} 

kurulum fonksiyonu tanımlama ve söküm bir dönüş sorumlu. Her test için

bir tablo odaklı test senaryosunda örneğin:

for _, tc := range cases { 
    t.Run(tc.name, func(t *testing.T) { 
     teardownSubTest := setupSubTest(t) 
     defer teardownSubTest(t) 

     result := Sum(tc.a, tc.b) 
     if result != tc.expected { 
      t.Fatalf("expected sum %v, but got %v", tc.expected, result) 
     } 
    }) 
} 
+0

Teşekkürler. İstediğim şeye yakın olsa da, bunu unutma şansı olmaksızın otomatik olarak yapacak olan ön ve arka kancalar arıyordum. Python'da, basit bir test koşucusu ile yaptığım şey bu. Ama ben bunun Golang'da mümkün olmadığını kabul etmeye geldim. –

0

Sen (bir yapı içinde fonksiyonları subTestSetup, alt test ve subTestTeardown db bağlantısı/diğer ortak öğeleri geçen tablosuna sahip düşünebilir subTestSetup bu yapıyı döndürebilir). & kurulumunun bazı bölümlerini/parçalarını yeniden kullanabilirsiniz, bu nedenle & test gereksiniminiz büyüdükçe bu modülerliği koruyun. SubTest'i çağırmadan önce, altTest ile ilgili herhangi bir sorun olsa bile, kodun kopmasını sağlamak için subTestTeardown() yöntemini çağırın.

İlgili konular