FC ConcursosFC Concursos

Flashcard FC213979

Qual é a finalidade de usar um mock em testes unitários para dependências externas?

Testes de Software

CESGRANRIO · 2024

De acordo com o assunto TI Engenharia de Software: Testes de Software, responda:

Qual é a finalidade de usar um mock em testes unitários para dependências externas?
Mostrar resposta e comentário

Resposta

Substituir a dependência externa por um mock que fornece respostas controladas e permite simular sucessos, falhas e verificar chamadas.

Explicação:
Um mock isola a unidade testada, garantindo determinismo (mesmos inputs → mesmos resultados), velocidade (sem chamadas de rede) e confiabilidade (sem depender da disponibilidade de terceiros).
Com mocks é possível configurar respostas previsíveis, simular erros ou timeouts e registrar/verificar parâmetros e número de invocações, facilitando testar cenários raros ou de falha.

exemplo:
# payments.py
import requests

def charge_card(token, amount):
    resp = requests.post("https://pagamentos.example/charge",
                         json={"token": token, "amount": amount},
                         timeout=5)
    if resp.status_code == 200 and resp.json().get("status") == "approved":
        return True
    return False

# test_payments.py (usando pytest e unittest.mock)
from unittest.mock import patch, Mock
from payments import charge_card

def test_charge_card_approved():
    mock_resp = Mock()
    mock_resp.status_code = 200
    mock_resp.json.return_value = {"status": "approved"}

    with patch("payments.requests.post", return_value=mock_resp) as mock_post:
        result = charge_card("tok_abc", 1000)
        assert result is True
        mock_post.assert_called_once()
        args, kwargs = mock_post.call_args
        # verifica URL e payload básico
        assert "pagamentos.example/charge" in args[0]
        assert kwargs["json"] == {"token": "tok_abc", "amount": 1000}

Nesse teste o mock substitui a chamada HTTP externa, permite forçar uma resposta de aprovação e verificar que a função enviou o payload correto, sem realizar rede real.




Veja como foi cobrado:
https://flashcardsconcursos.com.br/portal/flashcard/213573

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo