Mockar demais é perigoso

O uso de test doubles é uma prática antiga dentro da disciplina de testes automatizados. Antiga, bem disseminada e bastante útil. No entanto, com qual frequência e em quais situações devemos utilizá-los não são pontos tão claros e uniformes nessa disciplina.

Este artigo traz meu ponto de vista sobre o assunto.

(Ao longo do texto, uso o termo “SUT” – System Under Test – para me referir à unidade sendo testada e a invenção “mockar” com o significado de “criar um test double”, seja este um mock verdadeiro ou qualquer outro tipo de double.)

USANDO TEST DOUBLES

No lugar de objetos que acessam recursos externos

Dependências externas são aquelas que fogem da fronteira de memória do software, como bancos de dados, o sistema de arquivos ou uma API REST. Continue lendo

Anúncios

Código como transmissor de conhecimento

Escrever código de forma clara é uma tarefa difícil.

Neste artigo, veremos algumas sugestões de como escrever código de negócio de uma forma que ele “fale a língua do domínio”, comunicando seu propósito para o time de desenvolvimento e também para os domain experts.

PERSIGA A LINGUAGEM UBÍQUA

A Linguagem Ubíqua (Ubiquitous Language), termo oriundo do Domain-Driven Design, é uma linguagem estabelecida entre o time de desenvolvimento e domain experts, de forma que haja uma comunicação clara entre todos (sem “tecniquês” e mais focada no negócio).

Os termos dessa linguagem devem se refletir no código, de forma que não sejam necessárias traduções do mesmo para a linguagem usada com os especialistas de negócio. Sendo assim, se “Política de Retenção de Clientes” é um termo empregado no seu domínio atual, não há porque inventar outro termo para colocar no código. Continue lendo

Como testar que o método disparou a exceção com a mensagem correta? [Dica Rápida]

Olá, pessoal

Essa é uma dica rápida para testarmos se a mensagem retornada em uma exceção é de fato a mensagem desejada.

A forma mais popular de testarmos se uma exceção foi disparada é usarmos um assertion method específico para isso, como o exemplo com NUnit:

// fixture setup...

var ex = Assert.Throws<MyException>(() => sut.DoSomething());
Assert.AreEqual("invalid operation", ex.Message);

Continue lendo »