Alguém pode explicar o uso de Python's setUp
e tearDown
métodos ao escrever casos de teste, além de que setUp
é chamado imediatamente antes de chamar o método de teste e tearDown
é chamado imediatamente após ter sido chamado?
Respostas:
Em geral, você adiciona todas as etapas de pré-requisito para configurar e todas as etapas de limpeza para tearDown.
Você pode ler mais com exemplos aqui .
Quando um método setUp () é definido, o executor de teste executará esse método antes de cada teste. Da mesma forma, se um método tearDown () for definido, o executor de teste invocará esse método após cada teste.
Por exemplo, você tem um teste que requer a existência de itens, ou certo estado - então você coloca essas ações (criar instâncias de objeto, inicializar db, preparar regras e assim por diante) no setUp.
Além disso, como você sabe, cada teste deve parar no local onde foi iniciado - isso significa que temos que restaurar o estado do aplicativo ao seu estado inicial - por exemplo, fechar arquivos, conexões, remover itens recém-criados, chamar o retorno de chamada de transações e assim por diante - tudo isso etapas devem ser incluídas no tearDown.
Portanto, a ideia é que o teste em si deve conter apenas ações que devem ser realizadas no objeto de teste para obter o resultado, enquanto setUp e tearDown são os métodos para ajudá-lo a deixar seu código de teste limpo e flexível.
Você pode criar um setUp e tearDown para vários testes e defini-los em uma classe pai - portanto, seria fácil para você oferecer suporte a esses testes e atualizar preparações e limpezas comuns.
Se você está procurando um exemplo fácil, use o seguinte link com o exemplo
Você pode usá-los para fatorar o código comum a todos os testes no conjunto de testes.
Se você tiver muitos códigos repetidos em seus testes, poderá torná-los mais curtos movendo este código para setUp / tearDown.
Você pode usar isso para criar dados de teste (por exemplo, configurar fakes / mocks) ou remover funções com fakes.
Se você estiver fazendo um teste de integração, pode usar a verificação das pré-condições ambientais na configuração e pular o teste se algo não estiver configurado corretamente.
Por exemplo:
class TurretTest(unittest.TestCase):
def setUp(self):
self.turret_factory = TurretFactory()
self.turret = self.turret_factory.CreateTurret()
def test_turret_is_on_by_default(self):
self.assertEquals(True, self.turret.is_on())
def test_turret_turns_can_be_turned_off(self):
self.turret.turn_off()
self.assertEquals(False, self.turret.is_on())
Suponha que você tenha uma suíte com 10 testes. 8 dos testes compartilham o mesmo código de configuração / desmontagem. Os outros 2 não.
a configuração e a desmontagem fornecem uma boa maneira de refatorar esses 8 testes. Agora o que você faz com os outros 2 testes? Você os moveria para outro testcase / suite. Portanto, usar configuração e desmontagem também ajuda a fornecer uma maneira natural de dividir os testes em casos / suítes