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?


źródło

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.

zzzz
źródło
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.
TomDotTom
źródło
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.

Francesco Casula
źródło
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

Robert King
źródło
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)
użytkownik 2865442
źródło
2
go test -v ./<package_name> -run Test

Zapobiega buforowaniu wyników testu.

go test -count=1 ./<package_name> -run Test
Dele
źródło
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
Abhishek Srivastava
źródło