Dado, quando, afirmações e confiança na implementação

No último texto sobre afirmações , algo importante estava faltando e não foi acordado.

Qual a diferença entre dado e quando e como isso está relacionado às afirmações?

A ideia subjacente a isso é simples - queremos limitar o número de afirmações.

Considere um pequeno exemplo.

Vamos passar algum objeto válido para o método, chamar o serviço adicional e enriquecer suas propriedades.

Não devo escrever o código antes do teste, portanto, assumiremos que isso é apenas para transmitir a imagem geral.

public User enrichUser(User validUser){ user.setDetails(enrichmentService.getUserDetails(validUser.getId())); return user; } 


Não estamos interessados ​​em variações validUser. Não é nulo, sempre tem um ID e é válido. Esta é uma pré-condição, ou seja, dado.

De fato, precisamos considerar duas condições - o enriquecimento do serviço falha e o sucesso. Esta é uma condição, ou seja, quando

Como distinguir um do outro? Dado não requer verificação de outros casos, quando - requer. I.e. whenValidUser requer whenInvalidUser, e givenValidUser não.

E enriqumentservice == null? Se injetarmos uma dependência, poderemos considerar essa parte da configuração e não pensar nos testes. Absolutamente. Existem pré-condições que não fazem sentido listar.

Se o método aceitar apenas usuário, o número de scripts sendo verificados aumentará. Dado se torna quando.

Outra pergunta - mas, estritamente falando, por acidente ou intencionalmente, um método pode arruinar um usuário para nós? Não deveríamos dar uma olhada?

Se respondermos - sim, devemos, teremos que admitir que isso pode ser um grande fardo. Um usuário pode ter cinquenta propriedades e a verificação delas em cada método pode ser cara. Existem verificações em massa usando bibliotecas, mas perdemos a importante função do teste - prescrever a funcionalidade desejada e não coletar a sujeira por trás da curva de implementação.

Isso pode ser comparado à segurança do aeroporto - alguém verifica a passagem, a bagagem, os bolsos e os cheques não são duplicados a cada passo. I.e. Os ativos confiam no que a implementação fará e verifique apenas o que prescrevem.

Assim, uma pré-condição adequadamente construída reduz o número de scripts e asserções. Fazemos afirmações apenas sob condição.

Infelizmente, estruturas como o Pepino não fazem muita diferença, porque as próprias pré-condições não verificam se o termo Given, that When é o mesmo, puramente descritivo.

Em casos mais complexos, é difícil distinguir um do outro, que por si só cheira. Por exemplo, muitos testes seguidos verificam a mesma coisa ou algumas das condições nos testes são esquecidas ou ignoradas como inadequadas.

Esse é um bom motivo para reestruturar as especificações e redesenhar.

Source: https://habr.com/ru/post/pt475612/


All Articles