Jak uruchomić przypadki testowe w określonym pliku?


205

Moje przypadki testowe pakietu są rozproszone po wielu plikach, jeśli go test <package_name>je uruchomię , uruchomię wszystkie przypadki testowe w pakiecie.

Nie trzeba jednak uruchamiać ich wszystkich. Czy istnieje sposób określenia pliku go testdo uruchomienia, aby uruchamiał tylko przypadki testowe zdefiniowane w pliku?

go 

Odpowiedzi:


326

Istnieją dwa sposoby. Łatwo jest użyć -runflagi i podać wzorzec pasujący do nazw testów, które chcesz uruchomić.

Przykład:

$ go test -run NameOfTest

Zobacz dokumentację, aby uzyskać więcej informacji.

Innym sposobem jest nazwanie określonego pliku zawierającego testy, które chcesz uruchomić:

$ go test foo_test.go

Ale jest haczyk. Działa to dobrze, jeśli:

  • foo.gojest w package foo.
  • foo_test.gojest w package foo_testi importuje „foo”.

Jeśli foo_test.goi foo.gosą tym samym pakietem (częsty przypadek), musisz nazwać wszystkie inne pliki wymagane do zbudowania foo_test. W tym przykładzie byłoby to:

$ go test foo_test.go foo.go

Polecam użyć -runwzoru. Lub, tam gdzie to możliwe, zawsze uruchamiaj wszystkie testy pakietów.


1
czy zechciałby pan opracować pierwszy (łatwy) sposób -run? Nie mogę znaleźć żadnego podręcznika na ten temat.

1
Możesz również znaleźć informacje na ten temat zgo help testflag
Jeffrey Martinez

Kiedy używam polecenia, go test utils.go utils_test.godane wyjściowe są ok command-line-arguments 0.002s. To nie uruchamia testu. Powodem, dla którego chcę korzystać z tego trybu testowego jest to, że pakiet zawiera wiele plików i nie kompilują się jeszcze z wyjątkiem utils. Chciałbym więc sfinalizować narzędzia przed uruchomieniem innych plików. Jak mogę to zrobić ?
chmike

Jeśli chcesz zobaczyć, co jest rejestrowane podczas testowania, warto wspomnieć o -v(pełnej) fladze. Z dokumentacji-v Verbose output: log all tests as they are run. Also print all text from Log and Logf calls even if the test succeeds.
robstarbuck

121

Odpowiedź @ zzzz jest w większości kompletna, ale aby uchronić innych przed koniecznością kopania odnośnej dokumentacji , możesz uruchomić pojedynczy test w pakiecie w następujący sposób:

go test packageName -run TestName

Pamiętaj, że chcesz przekazać nazwę testu, a nie nazwę pliku, w którym test istnieje.

-runFlaga rzeczywiście akceptuje regex więc można ograniczyć jazdę próbną do klasy testów. Z dokumentów:

-run regexp
    Run only those tests and examples matching the regular
    expression.

28
Warto zauważyć, że nazwa pakietu to pełna nazwa pakietu, np. „Github.com/you/stuff/a/b/c”
garbagecollector

1.9.3 akceptuje również ścieżkę względną pakietu.

2
Nie jestem pewien, dlaczego, ale z jakiegoś powodu powinienem podać „./” przed nazwą pakietu
Roozbeh Zabihollahi

12

Podczas przeprowadzania pojedynczego testu zwykle robię:

go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1

-count 1zapewnia również, że test jest uruchamiany za każdym razem zamiast buforowania. Przydatne, gdy testujesz w warunkach wyścigowych i zdajesz test, który czasami kończy się niepowodzeniem. W wersjach Go nie wykorzystujących modułów to samo można osiągnąć przez ustawienie, GOCACHE=offale źle to współdziała z modułami Go.


6

we wtyczce go-lang intelliJ IDEA (i zakładam, że w jetbrains Gogland) możesz po prostu ustawić rodzaj testu na plik w trakcie uruchamiania> edytuj konfiguracje

zrzut ekranu utwórz test go w pliku go


2
W Gogland możesz po prostu kliknąć prawym przyciskiem myszy plik testowy i wybrać „uruchom foo_test.go”, zbuduje on pakiet z testami, a następnie przekaże wyrażenie regularne zawierające nazwy wszystkich testów w tym pliku testowym do flagi -run. Naprawdę przydatna funkcja.
Eloff,

4
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"

go test -v -run $(cat coordinator_test.go | testcases)

2
go test -v ./<package_name> -run Test

Zapobiega buforowaniu wyników testu.

go test -count=1 ./<package_name> -run Test

0
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • TestFunc musi znajdować się w gopliku testowym w tym pakiecie
  • Możemy podać wyrażenie regularne pasujące do zestawu przypadków testowych lub po prostu dokładną funkcję przypadku testowego do uruchomienia pojedynczego przypadku testowego. Na przykład-run TestCaseFunc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.