0Pricing
PHP Academy · Aula

Simulação de dependências com PHPUnit

Crie objetos simulados para isolar unidades e controlar o comportamento dos colaboradores.

Simulação de dependências com PHPUnit é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.

Por que usar dublês?

A simulação substitui uma dependência real (banco de dados, serviço de e-mail ou cliente HTTP) por um substituto controlável, para que os testes sejam rápidos, isolados e determinísticos.

createMock()

createMock(ClassName::class) cria um objeto simulado que implementa todos os métodos da classe, retornando null por padrão.

<?php
$mailer = $this->createMock(Mailer::class);
// All methods return null by default

Esperando chamadas de métodos

Use expects() com correspondentes como once(), exactly(3), never() e any() para verificar se os métodos são chamados o número correto de vezes.

<?php
$mailer->expects($this->once())
       ->method("send")
       ->with("user@example.com", "Welcome!");

Definindo valores de retorno

Use willReturn() para fazer um método simulado retornar um valor específico.

<?php
$repo = $this->createMock(UserRepository::class);
$repo->method("find")
     ->willReturn(new User(id: 1, name: "Alice"));

willReturnMap()

Retorne valores diferentes dependendo do argumento usando willReturnMap().

<?php
$cache->method("get")
      ->willReturnMap([
          ["key:1", "value-one"],
          ["key:2", "value-two"],
      ]);

willThrowException()

Faça um objeto simulado lançar uma exceção para testar os caminhos de tratamento de erros.

<?php
$repo->method("find")
     ->willThrowException(new DatabaseException("Connection lost"));

Correspondentes de argumentos

Use correspondentes de argumentos em with() para obter asserções flexíveis: $this->anything(), $this->equalTo(), $this->isInstanceOf().

<?php
$logger->expects($this->once())
       ->method("log")
       ->with($this->stringContains("error"));

Dublês parciais (getMockBuilder)

Use getMockBuilder() com onlyMethods() para simular métodos específicos, mantendo as implementações reais dos demais.

<?php
$svc = $this->getMockBuilder(EmailService::class)
            ->onlyMethods(["sendRaw"])
            ->getMock();
$svc->method("sendRaw")->willReturn(true);

Padrão de espionagem

Um espião registra todas as chamadas para que você possa fazer asserções sobre elas após a execução — os dublês do PHPUnit podem atuar como espiões usando any() e capturando argumentos.

Injetando dublês

Passe dublês à classe em teste por meio da injeção no construtor — o padrão comum para código testável e desacoplado.

<?php
$service = new NotificationService($mailer, $logger);
$service->notify($user);

Dublês de interfaces versus classes concretas

É preferível simular interfaces — nenhum detalhe de implementação influencia o teste, e os testes continuam válidos mesmo que a implementação real seja alterada.

Resumo

Use createMock() para isolar dependências. Use expects()->method()->with()->willReturn() para definir expectativas e comportamentos simulados. Injete dublês pelo construtor.

Verificação rápida

Qual método faz um dublê retornar um valor específico?

Perguntas Frequentes

A aula “Simulação de dependências com PHPUnit” é grátis?

Sim — o texto completo de “Simulação de dependências com PHPUnit” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.

O que vou aprender em “Simulação de dependências com PHPUnit”?

Crie objetos simulados para isolar unidades e controlar o comportamento dos colaboradores. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar PHP Academy?

Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Simulação de dependências com PHPUnit”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de PHP Academy?

Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Configuração do PHPUnit e primeiro teste
  2. Asserções e métodos de teste
  3. Provedores de dados para testes parametrizados
  4. Simulação de dependências com PHPUnit
← Voltar para PHP Academy