Sobes.tech
Middle+

Qual é a diferença entre stop e mock?

sobes.tech IA

Resposta da IA

stop é utilizado para fins de depuração para interromper a execução do script e verificar o estado em um momento específico. mock é uma técnica em testes unitários para simular o comportamento de dependências externas de uma classe ou função, com o objetivo de isolar o código que está sendo testado.

Stop:

  • Objetivo: Depuração, verificação de resultados intermediários.
  • Aplicação: Durante o desenvolvimento, para parar temporariamente a execução.
  • Ferramentas: Funções embutidas (die(), exit()), ferramentas de depuração (xdebug).
<?php
// Exemplo de uso de stop para depuração
$data = ['item1', 'item2'];
echo "Antes do processamento de dados.\n";
// Interrompe a execução para verificar o conteúdo de $data
die(var_dump($data));
echo "Após o processamento de dados.\n"; // Este código não será executado

Mock:

  • Objetivo: Testes unitários, isolamento do código que está sendo testado.
  • Aplicação: Criação de "tampões" para dependências (bancos de dados, APIs externas, outras classes).
  • Ferramentas: Frameworks de teste (PHPUnit) e bibliotecas para criar mocks (Mockery).
<?php
// Exemplo de conceito mock (sem usar framework, para ilustração)
// Simulação de dependência
interface DataFetcher {
    public function fetchData(): array;
}

// Classe1, que depende de DataFetcher (que está sendo testada)
class DataProcessor {
    private DataFetcher $fetcher;

    public function __construct(DataFetcher $fetcher) {
        $this->fetcher = $fetcher;
    }

    public function processData(): array {
        $data = $this->fetcher->fetchData();
        // Lógica de processamento
        foreach ($data as &$item) {
            $item = strtoupper($item);
        }
        return $data;
    }
}

// Objeto mock para DataFetcher no teste
class MockDataFetcher implements DataFetcher {
    public function fetchData(): array {
        // Retorna dados predefinidos em vez de uma requisição real
        return ['mock_item_1', 'mock_item_2'];
    }
}

// No teste:
$mockFetcher = new MockDataFetcher();
$processor = new DataProcessor($mockFetcher);
$processed = $processor->processData();
// Verifica se $processed contém ['MOCK_ITEM_1', 'MOCK_ITEM_2']

O uso de mocks permite testar a lógica da classe A sem depender do funcionamento correto ou da disponibilidade da classe B, da qual A depende. Em vez da classe B real, usa-se um mock que retorna dados previsíveis ou verifica se certos métodos foram chamados.