Como posso fazer o processamento geral da configuração do teste que define o cenário para todos os testes ao usar o pacote de teste ?
Como exemplo, em Nunit, há um [SetUp]
atributo.
[TestFixture]
public class SuccessTests
{
[SetUp] public void Init()
{ /* Load test data */ }
}
unit-testing
go
Miltonb
fonte
fonte
Respostas:
A partir do Go 1.4, você pode implementar configuração / desmontagem (não há necessidade de copiar suas funções antes / depois de cada teste). A documentação é descrita aqui na seção Principal :
Levei algum tempo para descobrir que isso significa que se um teste contiver uma função
func TestMain(m *testing.M)
, essa função será chamada em vez de executar o teste. E nesta função posso definir como os testes serão executados. Por exemplo, posso implementar uma configuração global e desmontagem:Alguns outros exemplos podem ser encontrados aqui .
fonte
TestMain
é uma vez em um pacote, então não é tão útil. Acho que os subtestes são melhores para propósitos mais complexos.lstat $GOROOT/subtests: no such file or directory
Isso pode ser conseguido colocando um
init()
função no_test.go
arquivo. Isso será executado antes dainit()
função.O _test.init () será chamado antes da função init () do pacote.
fonte
[TestFixtureSetUp]
atributo do NUnit .Dada uma função simples para teste de unidade:
Você pode testá-lo com uma função de configuração que retorna a função de desmontagem. E depois de chamar setup (), você pode fazer uma chamada adiada para teardown ().
A ferramenta de teste Go relatará as declarações de registro no console do shell:
Você pode passar alguns parâmetros adicionais para configurar / desmontar com esta abordagem.
fonte
Normalmente, os testes em go não são escritos no mesmo estilo que outras linguagens. Freqüentemente, há relativamente menos funções de teste, mas cada uma contém um conjunto de casos de teste baseado em tabela. Vejo este artigo escrito por um membro da equipe Go.
Com um teste baseado em tabela, você simplesmente coloca qualquer código de configuração antes do loop que executa os casos de teste individuais especificados na tabela e coloca qualquer código de limpeza posteriormente.
Se você ainda tiver código de configuração compartilhado entre funções de teste, pode extrair o código de configuração compartilhado em uma função e usar um
sync.Once
se for importante que seja executado exatamente uma vez (ou como outra resposta sugere, useinit()
, mas isso tem a desvantagem de que a configuração será feito mesmo se os casos de teste não forem executados (talvez porque você limitou os casos de teste usandogo test -run <regexp>
.)Eu diria que se você acha que precisa de configuração compartilhada entre diferentes testes que são executados exatamente uma vez, você deveria pensar se realmente precisa disso e se um teste baseado em tabela não seria melhor.
fonte
A estrutura de teste Go não tem nada equivalente ao atributo SetUp do NUnit (marcando uma função a ser chamada antes de cada teste no conjunto). Existem algumas opções, porém:
Basta chamar sua
SetUp
função de cada teste onde for necessário.Use uma extensão para a estrutura de teste do Go que implementa paradigmas e conceitos xUnit. Três opções fortes vêm à mente:
Cada uma dessas bibliotecas encoraja você a organizar seus testes em suítes / fixtures semelhantes a outros frameworks xUnit, e irá chamar os métodos de configuração no tipo de suíte / fixture antes de cada um dos
Test*
métodos.fonte
Plug desavergonhado, criei https://github.com/houqp/gtest para ajudar a resolver exatamente esse problema.
Aqui está um exemplo rápido:
Você pode criar qualquer grupo de teste que desejar dentro de um pacote com cada um deles usando um conjunto diferente de rotinas de configuração / desmontagem.
fonte