Como executar casos de teste em um arquivo especificado?

205

Meus casos de teste de pacote estão espalhados por vários arquivos, se eu executá- go test <package_name>lo, ele executa todos os casos de teste no pacote.

É desnecessário executar todos eles. Existe uma maneira de especificar um arquivo para go testexecução, para que ele execute apenas os casos de teste definidos no arquivo?


fonte

Respostas:

326

Existem duas maneiras. O mais fácil é usar o -runsinalizador e fornecer um padrão que corresponda aos nomes dos testes que você deseja executar.

Exemplo:

$ go test -run NameOfTest

Veja os documentos para mais informações.

A outra maneira é nomear o arquivo específico, contendo os testes que você deseja executar:

$ go test foo_test.go

Mas há um problema. Isso funciona bem se:

  • foo.goestá em package foo.
  • foo_test.goestá dentro package foo_teste importa 'foo'.

Se foo_test.goe foo.gofor o mesmo pacote (um caso comum), você deverá nomear todos os outros arquivos necessários para construir foo_test. Neste exemplo, seria:

$ go test foo_test.go foo.go

Eu recomendo usar o -runpadrão. Ou, onde / quando possível, sempre execute todos os testes de pacotes.

zzzz
fonte
1
você se importaria de elaborar o primeiro (fácil) caminho, por -runfavor? Não consigo encontrar nenhuma referência manual nessa.
1
Você também pode encontrar informações sobre isso comgo help testflag
Jeffrey Martinez
Quando eu uso o comando, go test utils.go utils_test.goa saída é ok command-line-arguments 0.002s. Não executa o teste. O motivo pelo qual desejo usar esse modo de teste é porque o pacote contém muitos arquivos e eles ainda não são compilados, exceto os utilitários. Então, eu gostaria de finalizar os utils antes do workinqg em outros arquivos. Como eu posso fazer isso ?
Chrike #
Se você quiser ver o que está registrado durante o teste, vale a pena mencionar o -vsinalizador (detalhado). De os documentos-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

A resposta do @ zzzz é quase completa, mas para evitar que outras pessoas precisem procurar na documentação referenciada , você pode executar um único teste em um pacote da seguinte maneira:

go test packageName -run TestName

Observe que você deseja passar o nome do teste, não o nome do arquivo em que o teste existe.

O -runsinalizador realmente aceita uma regex para que você possa limitar a execução do teste a uma classe de testes. Dos documentos:

-run regexp
    Run only those tests and examples matching the regular
    expression.
TomDotTom
fonte
28
Vale ressaltar que o nome do pacote é o nome completo do pacote, por exemplo "github.com/you/stuff/a/b/c"
garbagecollector
1.9.3 também aceita o caminho relativo do pacote.
2
Não sei por que, mas, por algum motivo, devo especificar "./" antes do nome do pacote
Roozbeh Zabihollahi 4/19/19
12

Ao executar um único teste, costumo fazer:

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

-count 1também garante que o teste seja executado sempre, em vez de ser armazenado em cache. Útil quando você está testando contra condições de corrida e tem um teste que falha apenas algumas vezes. Nas versões do Go que não usam módulos, o mesmo pode ser alcançado pela configuração, GOCACHE=offmas isso interage mal com os módulos do Go.

Francesco Casula
fonte
6

no plugin intelliJ IDEA go-lang (e eu assumo no jetbrains Gogland), você pode simplesmente definir o tipo de teste para arquivar em execução> editar configurações

captura de tela criar teste ir em arquivo go

Robert King
fonte
2
No Gogland, você pode simplesmente clicar com o botão direito do mouse no arquivo de teste e escolher "executar foo_test.go". Ele criará o pacote com os testes e depois passará uma regex contendo os nomes de todos os testes nesse arquivo de teste para o sinalizador -run. Um recurso realmente útil.
Eloff 20/09
4
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"

go test -v -run $(cat coordinator_test.go | testcases)
user2865442
fonte
2
go test -v ./<package_name> -run Test

Impede o armazenamento em cache dos resultados do teste.

go test -count=1 ./<package_name> -run Test
Dele
fonte
0
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • O TestFunc deve estar dentro de um goarquivo de teste nesse pacote
  • Podemos fornecer uma expressão regular para corresponder a um conjunto de casos de teste ou apenas a função exata de caso de teste para executar um único caso de teste. Por exemplo-run TestCaseFunc
Abhishek Srivastava
fonte