Qual é a diferença entre setUp()
e setUpClass()
na unittest
estrutura Python ? Por que a configuração seria tratada em um método e não no outro?
Quero entender que parte da configuração é feita nas funções setUp()
e setUpClass()
, bem como com tearDown()
e tearDownClass()
.
unittest
não considera um teste aprovado até quetearDown
seja concluído sem incidentes.setUp
etearDown
são executados uma vez para cadatest
método (duas vezes no total neste exemplo), massetUpClass
etearDownClass
são executados apenas uma vez cada.Qual é a diferença entre
setUp()
esetUpClass()
naunittest
estrutura Python ?A principal diferença (conforme observado na resposta de Benjamin Hodgson) é que
setUpClass
é chamado apenas uma vez e antes de todos os testes, enquantosetUp
é chamado imediatamente antes de cada teste. (NB: o mesmo se aplica aos métodos equivalentes em outras estruturas de teste xUnit, não apenas em Pythonunittest
.)Da
unittest
documentação :e:
Por que a configuração seria tratada em um método e não no outro?
Esta parte da pergunta ainda não foi respondida. De acordo com meu comentário em resposta à resposta de Gearon, o
setUp
método se destina a elementos do fixture que são comuns a todos os testes (para evitar a duplicação desse código em cada teste). Acho isso geralmente útil, pois a remoção da duplicação (geralmente) melhora a legibilidade e reduz a carga de manutenção.O
setUpClass
método é para elementos caros que você prefere ter que fazer apenas uma vez, como abrir uma conexão de banco de dados, abrir um arquivo temporário no sistema de arquivos, carregar uma biblioteca compartilhada para teste, etc. Fazer essas coisas antes de cada teste tornaria o conjunto de testes demais, então fazemos isso apenas uma vez antes de todos os testes. Esta é uma pequena degradação na independência dos testes, mas uma otimização necessária em algumas situações. Indiscutivelmente, não se deve fazer tais coisas em testes de unidade, pois geralmente é possível simular o banco de dados / sistema de arquivos / biblioteca / qualquer coisa sem usar a coisa real. Como tal, acho quesetUpClass
raramente é necessário. No entanto, é útil quando o teste dos exemplos acima (ou semelhantes) se torna necessário.fonte