Mock e Isolamento de Testes
Deslize para mostrar o menu
Mocking é uma técnica poderosa em testes unitários que permite substituir partes do seu sistema em teste por objetos mock ou funções simuladas. O objetivo é isolar a unidade de código que está sendo testada de suas dependências, como bancos de dados, APIs ou outros sistemas complexos. Ao utilizar mocks, é possível controlar o comportamento das dependências e focar em testar a lógica do seu código em um ambiente controlado.
Isolamento de testes é importante porque garante que os testes não interfiram entre si e não sejam afetados por fatores externos ao seu escopo. Testes isolados são mais confiáveis e fáceis de depurar, pois seus resultados dependem apenas do código em teste e das condições específicas que você configura, e não do estado ou comportamento de sistemas externos.
Em Python, o módulo unittest.mock fornece ferramentas para simular objetos e funções. Ao usar mocking, você pode substituir uma função ou objeto real por um mock que retorna valores controlados ou registra como foi utilizado. Isso é especialmente útil quando seu código interage com recursos que são lentos, imprevisíveis ou indisponíveis durante os testes.
12345678910111213141516171819202122232425import unittest from unittest.mock import patch def check_the_sky(): # Simulate a slow or unreliable API raise ConnectionError("API not available") def get_advice(): if check_the_sky(): return "Take an umbrella." else: return "Enjoy the sunshine!" class TestWeather(unittest.TestCase): @patch('__main__.check_the_sky') def test_advice_when_rainy(self, mock_check): mock_check.return_value = True self.assertEqual(get_advice(), "Take an umbrella.") @patch('__main__.check_the_sky') def test_advice_when_clear(self, mock_check): mock_check.return_value = False self.assertEqual(get_advice(), "Enjoy the sunshine!") unittest.main(argv=[''], exit=False)
Neste exemplo de código, a função check_the_sky simula uma dependência externa que é instável ou está fora do ar, como uma API de clima que pode não estar sempre disponível. A função get_advice contém a lógica que se deseja testar — ela chama check_the_sky e retorna um conselho com base no resultado.
A classe de teste do unittest utiliza mocking para substituir a função real check_the_sky por um mock que retorna valores controlados. Isso permite testar como get_advice se comporta em diferentes cenários, como quando o céu está limpo ou chuvoso, sem depender do sistema externo real.
O decorador @patch é utilizado para substituir temporariamente a função real check_the_sky por um objeto mock durante cada método de teste. O objeto mock é passado para o método de teste como o parâmetro mock_check. Você utiliza mock_check para definir o valor de retorno desejado para aquele teste, permitindo controlar como seu código se comporta e o que retorna em cada cenário.
A função unittest.main() nesta lição inclui alguns parâmetros extras necessários apenas para este ambiente de aprendizado. Eles ajudam o código a ser executado corretamente na plataforma e não fazem parte dos conceitos principais de Python que você precisa aprender agora.
Ao utilizar mocking, você isola seus testes de sistemas externos que podem ser lentos ou não confiáveis. Isso torna seus testes rápidos, repetíveis e determinísticos, pois você controla exatamente o que a dependência retorna em cada caso de teste.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo