2013-10-05 39 views
52

Git alanında çalışma alanı temizliğini korumak için alt testler olarak testler ve örnekler ile birlikte bir paket oluşturmak istiyorum. Bu mümkün mü ve eğer mümkünse nasıl?Alt dizindeki Golang testleri

Tüm belgeler her zaman test kodunu diğer kodla aynı yere koyar, bu bir şekilde daha mı yoksa sadece konvansiyonel mi?

Teşekkürler.

+3

Not: 'go test./...' geçerli klasörde * ve * tüm alt klasörlerde testler yürütecektir. Bkz. [Aşağıdaki yanıtım] (http://stackoverflow.com/a/21725603/6309) – VonC

+0

Olası kopyası [Projemde tüm testler nasıl test edilir?] (Http://stackoverflow.com/ sorular/16353016/nasıl yapılır projeye-test-all-test-in-benim) –

+0

Ben de aynı şeyi düşünüyordum. Aynı seviyede diretor alt dirs var çünkü test n bir ayrı dir koyarak, sorun yaşıyor. –

cevap

86

Not olacaktır.

size Git projesinin kök klasörü, tipi ise:

' ./...' notasyonu " command go" bölümünde " Description of package lists" anlatılan
go test ./... 

:

Bir içe aktarma yolu, bir veya daha fazla "..." joker karakterini içeriyorsa, her biri, dizgileri içeren boş dizeler ve dizeler de dahil olmak üzere herhangi bir dizeyle eşleştirilebiliyorsa bir kalıptır.

Böyle bir desen, desenlerle eşleşen adlara sahip GOPATH ağaçlarında bulunan tüm paket dizinlerini genişletir. Özel bir durum olarak

, x/... maçlar x yanı sıra x 'ın alt dizinleri.
Örneğin, net/..., net ve alt dizinlerinde paketleri genişletir.Eğer bir alt klasörde sizin _test.go dosyaları tutarsanız


, 'go test ./...' komutu onları almak mümkün olacak.
Ama: Test dosya paketini erişmek mümkün içeriği ihraç etmek için dışarı aktarılan değişkenler ve fonksiyonlar önüne eklemeniz gerekecektir

  • sırayla, paket adıyla (testlerinizde kullanılır).
  • Dışa aktarılmayan içeriğe erişemezsiniz.

Yine de, ana kaynak dosyanın hemen yanındaki _test.go dosyasını saklamayı tercih ediyorum: bulmak daha kolay.

+1

Bazıları özel öğelere erişimin normal kara kutu testi ve daha iyi olduğunu iddia edebilir. Herkese açık sembollere sahip olmakla ilgili olarak, her zaman _ "..." dosyasını içe aktarabilirsiniz. – ddevienne

10

Testlerinizi, kodunuzun yanında, file_test.go adlı bir dosyaya koyun ve burada "dosya", test ettiğiniz kaynak kod dosyasının adıdır. Bu bir sözleşmedir ve kendi tecrübemde en iyisi olduğunu buldum.

go test aracı oldukça sizin için yeterli otomatik değilse, otomatik güncelleme ve davranışlarına göre geleneksel Git testleri yanı sıra GoConvey testleri (çalışacak bir web arayüzü vardır GoConvey, içine görünebilir ve geleneksel Go testlerinden daha fazla belgelidirler).

+2

GoConvey müthiş (ve yüksek beklentisiyle yeni kullanıcı arayüzünü bekliyorum). Mevcut projemde https://github.com/VonC/asciidocgo/blob/master/abstractNode_test.go adresinde olduğu gibi kullanıyorum). Ancak, "git testi" de alt klasörler için çalışabilir. Bakınız [aşağıda cevabım] (http://stackoverflow.com/a/21725603/6309) – VonC

+0

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

+0

Önemli değil, GoConvey hala kayalar;) – VonC

0

Normalde testi yapmazsanız, ancak dizinleri ve kullanım ithalat içine grup dosyanızı

import "./models" eğer bir düzey dışarı ve

bir seviye olan
import "../models eğer bir seviye çıktı gibi can Örneğin, için:
./models/todo.go
./test/todo_test.go

den todo.go test etmek için Eğer listeye Eğer test etmek isteyen tüm paketler gerekir:, todo_test.go içinde ithalat Eğer can "yinelemeli" run go test

import "../models"

+0

Bu kodu içe aktarma yöntemi yalnızca açıktaki işlevler için çalışır. Aynı pakette olduğu gibi davranıyormuş gibi görünmüyor, hatta bunları aynı pakete açıkça koyduğunuzu düşünün. Yani bu çözüm gerçekten birim testi için problemi çözmez. –

0

Lütfen aşağıdaki github deposunu deneyin.

https://github.com/appleboy/golang-testing

Sen golang test komut indirebilirsiniz.

$ curl -fsSL https://raw.githubusercontent.com/appleboy/golang-testing/master/coverage.sh /usr/local/bin/coverage 
$ chmod +x /usr/local/bin/coverage