Alt dizinde Golang testleri


123

Çalışma alanını daha temiz tutmak için Go'da alt dizinler olarak paket için testler ve örnekler içeren bir paket oluşturmak istiyorum. Bu mümkün mü ve eğer mümkünse nasıl?

Tüm dokümantasyon her zaman test kodunu diğer kodla aynı yere koyar, bu bir şekilde daha mı iyi yoksa sadece bir kural mı?


5
Not: go test ./...mevcut klasör ve tüm alt klasörler üzerinde testler çalıştıracaktır . Aşağıda cevabımı
VonC


ben de aynı şeyi düşünüyordum. Testleri ayrı bir dizine koymakta güçlük çekiyorlar çünkü aynı seviyedeki yönlendiricinin alt dizinleri var.
filthy_wizard

Yanıtlar:


204

O Not edebilirsiniz çalıştırmak go testyapmanız gerekir: "yinelemeli olarak" test etmek istediğiniz paketleri listelemek .

Go projenizin kök klasöründeyseniz şunu yazın:

go test ./...

' ./...' Gösterimi, " komutun " " Paket listelerinin açıklaması " bölümünde açıklanmıştır :go

Bir içe aktarma yolu, bir veya daha fazla " ..." joker karakter içeriyorsa , her biri boş dize ve eğik çizgi içeren dizeler de dahil olmak üzere herhangi bir dizeyle eşleşebilen bir kalıptır .

Böyle bir desen GOPATH, desenlerle eşleşen adlara sahip ağaçlarda bulunan tüm paket dizinlerine genişler .

Özel bir durum olarak, alt dizinlerinin yanı sıra x/...eşleşir . Örneğin, genişler ve alt dizinlerinde paketler.xx
net/...net


_test.goDosyalarınızı bir alt klasörde tutarsanız , ' go test ./...' komutu onları alabilecektir.
Fakat:

  • Test dosyasının dışa aktarılan içeriğe erişebilmesi için, dışa aktarılan değişkenlerinize ve işlevlerinize (testlerinizde kullanılan) paketinizin adını önek olarak eklemeniz gerekir.
  • dışa aktarılmamış içeriğe erişemezsiniz.

Bununla birlikte, _test.godosyayı ana kaynak dosyanın hemen yanında tutmayı tercih ederim : bulmak daha kolay.


4
Bazıları, özel eşyalara erişimin olmamasının normal kara kutu testi ve daha iyi olduğunu iddia edebilir. Genel simgeleri nitelendirme zorunluluğuyla ilgili olarak, her zaman _ "..." içe aktarabilirsiniz.
ddevienne

15

Testlerinizi kodunuzun yanında aynı dizine, file_test.go"dosya" nın test ettiğiniz kaynak kod dosyasının adı olduğu bir dosyaya koyun . Bu bir uzlaşmadır ve bunu kendi tecrübelerime göre en iyisi olarak buldum.

Eğer go testaraç oldukça sizin için yeterli otomatik değil, içine görünebilir GoConvey otomatik olarak güncellenecek ve geleneksel Git testleri yanı sıra davranış dayanmaktadır GoConvey testleri (çalıştırın ve daha fazla kendi kendini belgeleyen olan bir web arayüzü vardır, geleneksel Go testlerine göre).


2
GoConvey harika (ve yüksek beklentiyle yeni kullanıcı arayüzünü bekliyorum). Örneğin github.com/VonC/asciidocgo/blob/master/abstractNode_test.go'daki gibi mevcut projemde kullanıyorum ). Bununla birlikte, go testalt klasörler için de çalışabilir. Aşağıda cevabımı
VonC

Haklısın. Aslında, muhtemelen bu soruya verdiğim cevaptan daha alakalı.
Matt

10

REDAKTE

VonC'nin cevabı üzerine inşa edilmiştir,

Bu cevap içinde geçerlidir go1.11. Henüz üst goversiyonlarda test edilmemiştir .

Testlerini bir alt klasörde tutmak isteyenler için, diyelim ki test,

go test ./...

herhangi bir test içermeyenler de dahil olmak üzere her klasörde testler çalıştırmayı deneyecek ve böylece ?test dışı klasörler için sonraki raporda bir test olacaktır.

Koşu

go test ./.../test

bunun yerine yalnızca testklasörlerinizi hedefler , böylece yalnızca test klasörlerinize odaklanan temiz bir rapor elde edilir.

DİKKAT

Lütfen test alt klasörlerini kullanmanın kapsam raporu hesaplamasını engelleyeceğini unutmayın. Go'nun felsefesi, test dosyalarını paket klasörlerinde bırakmaktır.


1
Beş yıllık cevabıma ek olarak iyi bir ipucu. Olumlu oy verildi
VonC

sevgili anna, lütfen neyin işe yaramadığını açıkla? ve senin go versiyonun nedir? ne yapmaya çalışıyorsun? Daha sonra fark ettim ki bu yöntem kod kapsamını hesaplamaya izin vermiyor ki bu çok üzücü. Demek istediğin bu mu?
avi.elkharrat

1
go test ./.../testdöndürür go: warning: "./.../test" matched no packages// yalnızca test klasörlerini hedeflemez. go sürümü go1.13 darwin / amd64
anna

1
@Madeo, bu mantıklıdır, çünkü golang testlerin ve kodların ayrılmasını teşvik etmez. Anormallik, önceki sürümlerde buna izin vermekti.
avi.elkharrat

1
@ avi.elkharrat ve aslında testlerimi ayrı bir pakette / klasörde tutmayı sevmeme rağmen bu yaklaşımı artık değerlendirmemeye karar verdim = (
Madeo

-4

Normalde test yapmam, ancak dosyanızı dizinlerde gruplayabilir ve içe aktarmayı kullanabilirsiniz.

import "./models"bir seviye dışarı
import "../modelsise bir seviye dışarı ve bir seviye içeride ise

Örneğin:
./models/todo.go
./test/todo_test.go

teste todo.gogelen todo_test.go, içe aktarılacak todo_test.goolacak

import "../models"


Bu kodu içe aktarma yöntemi yalnızca açıktaki işlevler için çalışır. Açıkça aynı pakete koymuş olsanız bile aynı paketteymiş gibi davranmıyorlar. Dolayısıyla bu çözüm, birim testi için sorunu gerçekten çözmez.
Zarif Penguen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.