Por padrão, ao usar, go test
você descobrirá que todos os testes em um único pacote serão executados em série.
O que é ótimo! Se você deseja executá-los em paralelo, pode especificar o sinalizador desejado.
O que se deve observar é quando você está executando todo o conjunto de testes do seu projeto Go, com vários pacotes.
por exemplo, na seguinte estrutura de projeto: main.go database/ database.go database_test.go process/ process.go process_test.go
Executar os comandos a seguir na raiz do projeto go test ./...
irá , na verdade, executar os testes na database/
pasta e na process/
pasta, em paralelo, se você tiver mais de um núcleo na máquina host. Na verdade, o padrão será o número máximo de núcleos disponíveis no host. Observe, não as funções de teste individuais, mas todos os pacotes.
No entanto, isso não está totalmente claro se você observar o próprio comando go build na linha 123: http://golang.org/src/cmd/go/build.go#L123
. Você verá que o sinalizador -p o padrão é o número máximo de núcleos. Este resultado é que as compilações / testes do pacote serão executados em paralelo.
Eu fui pego por isso. Particularmente ao executar testes de integração com o mesmo banco de dados entre dois pacotes. O que acontece é que quando uma suíte começa preenchendo o banco de dados com alguns acessórios, pode ser que a desmontagem de outra suíte de teste não tenha terminado. Se você limpar em uma separação truncando suas tabelas, poderá descobrir que o truncamento ocorre após a inserção e nenhum dos dados está lá quando você esperava.
Mantenha isso em mente! Se você deseja forçar os pacotes a serem compilados / testados em série; usar e você deve ficar bem!go test -p 1 ./...