Devo testar a unidade

8

A maior parte da lógica do meu serviço da web envolve conversar com os serviços da web do nosso fornecedor (verificar disponibilidade, fazer pedidos etc.) Eles não têm um ambiente de teste e a maioria das chamadas não pode ser executada arbitrariamente (por exemplo, uma interrupção seria executada uma vez e iria realmente parar um serviço).

É possível executar testes de unidade nesse ambiente? Eu poderia simular respostas típicas, mas estou preocupado que as respostas codificadas dos fornecedores prejudiquem o ponto dos testes de unidade.

Tom Squires
fonte

Respostas:

30

Não, não vai. O objetivo dos testes de unidade é precisamente testar seu código isoladamente , independentemente do mundo externo.

Testar todo o seu sistema interagindo com partes externas, como serviços da web etc., é um teste de integração / sistema . Isso também é necessário na maioria dos projetos do mundo real, mas é um nível diferente dos testes de unidade. Na verdade, parece que na sua situação, como você tem dificuldades nos testes de integração, você precisa de testes de unidade ainda mais do que o habitual .

Como objetivo de longo prazo, considere educar e / ou incomodar os fornecedores para configurar um ambiente de teste para eles e seus clientes. Você pode precisar invocar o suporte de sua gerência para que isso seja bem-sucedido, portanto, prepare-se com fatos e números para convencê-los sobre o valor comercial de um ambiente de teste.

Péter Török
fonte
12
+1: "você precisa de testes de unidade ainda mais do que o habitual". E você precisa zombar com precisão da solicitação / resposta do fornecedor, tempo limite, erro, credenciais ruins e todas as outras pequenas coisas que causam "problemas" em um aplicativo como este.
S.Lott
1

O teste de unidade também fornecerá uma especificação executável inequívoca do comportamento que você espera de seus fornecedores. Isso provavelmente tornará a comunicação com eles muito mais fácil.

Se houver algum problema na interação entre o seu e o deles, você poderá fornecer a eles seus testes de unidade para indicar claramente qual o comportamento que seu código espera. Se o código deles não funcionar da mesma maneira que os testes de unidade, as diferenças geralmente são fáceis de identificar.

Josh Peterson
fonte
Esses testes são realmente úteis, mas a terminologia amplamente usada para esses testes é de sistema / aceitação, em vez de testes de unidade.
Péter Török
Josh Peterson Eu já tive reclamações de seus "desenvolvedores" antes porque acabei de enviar xml para eles, em vez de explicar o conteúdo xml. Eu acho que testes de unidade wouldent me ir muito longe :)
Tom Squires
0

ROI

Esta é realmente uma questão de retorno do investimento. Você acha que investir em testes de unidade vale o que você receberá? Ou seja, seu código foi testado isoladamente . Bem como todos os outros benefícios do teste de unidade.

Você pode contrastar isso com, digamos, uma abordagem de teste de aceitação automatizada, na qual você obteria uma conta de teste do seu fornecedor, na verdade, testando o sistema integrado com os testes. O custo de fazer o ATDD vale o que você recebe de volta. Ou seja, teste do sistema como um todo.

Cabe a você fazer a análise e descobrir se deve fazer testes de unidade, testes de aceitação automatizados, ambos, nenhum ou qualquer outra coisa.

dietbuddha
fonte