Digamos que eu tenha um método como este:
public void OrderNewWidget(Widget widget)
{
if ((widget.PartNumber > 0) && (widget.PartAvailable))
{
WigdetOrderingService.OrderNewWidgetAsync(widget.PartNumber);
}
}
Eu tenho vários métodos desse tipo no meu código (a metade frontal de uma chamada de serviço da Web assíncrona).
Estou discutindo se é útil cobri-los com testes de unidade. Sim, há lógica aqui, mas é apenas lógica de guarda. (Isso significa que garanto que tenho o material necessário antes de permitir a chamada do serviço web.)
Parte de mim diz "com certeza você pode testá-los à unidade, mas não vale o tempo" (estou em um projeto que já está atrasado).
Mas o outro lado diz: se você não testá-los, e alguém trocar os guardas, pode haver problemas.
Mas a primeira parte de mim responde: se alguém muda os guardas, então você está trabalhando mais para eles (porque agora eles precisam mudar os guardas e os testes de unidade dos guardas).
Por exemplo, se meu serviço assumir a responsabilidade de verificar a disponibilidade do Widget, talvez eu não queira mais essa proteção. Se estiver em teste de unidade, tenho que mudar dois lugares agora.
Eu vejo prós e contras nos dois sentidos. Então, pensei em perguntar o que os outros fizeram.
fonte
but it is not worth the time" (I am on a project that is already behind schedule).
Somos desenvolvedores de software. A única vez que estão dentro do cronograma é quando estamos mortos :)Respostas:
São três testes muito curtos. Você passou tanto tempo se perguntando a pergunta.
Escute este lado.
Se o seu mantenedor é uma porca TDD, você está tornando mais difícil para eles. Qualquer alteração que eu faça sem que haja uma alteração relacionada ou a adição de testes leva a que eu tenha que pensar muito. Na verdade, eu provavelmente adicionaria os testes antes de prosseguir e fazer a alteração.
A primeira parte de você está completamente errada. Dê um tapinha nas costas na segunda parte e pare de pensar nisso.
fonte
Simplificaria o teste de unidade se a lógica de guarda e a ordem real fossem métodos separados.
Na
Widget
aulaou um método equivalente em outro lugar
O método de pedido
Agora os testes
IsWidgetReadyForOrdering
se tornaram fáceis. Não pense muito sobre isso. Teste-o!fonte
OrderNewWidget
provavelmente está em outra classe queWidget
, uma vez que possui umWidget
argumento. Como o método não tem valor de retorno, testá-lo não é óbvio. Você teria que injetar umaWigdetOrderingService
zombaria que rastreia aOrderNewWidgetAsync
chamada.Se você não tiver tempo na sua programação para testes de unidade, mas tiver tempo reservado para um uso sólido do controle de qualidade, pergunte se você pode roubar parte desse tempo de controle de qualidade para escrever testes de unidade ou se pode passar parte do período de controle de qualidade fazendo testes de unidade, ou talvez apenas lide com código que não seja de unidade. Infelizmente, os agendamentos que são imóveis obrigam você a fazer concessões ou trabalhar até a morte, geralmente sugiro a primeira opção, porque a segunda resultará em você incapaz de apoiar / manter o sistema corretamente pelo prazo.
Dito isto, à sua questão geral de testar as declarações de guarda; Sim! Absolutamente teste declarações de guarda! Essas são partes importantes do comportamento desse método; você não gostaria de descobrir que alguém não entendeu algo que fazia uma correção de bugs e removeu seus guardas ou mudou o
&&
para um||
? Os testes de unidade garantirão que: a) você realmente acertou a lógica em seus guardas eb) ninguém quebra essa lógica mais tarde sem receber uma queixa quando eles executam os testes de unidade, dizendo que deve ser assim por algum motivo.fonte
Há algumas excelentes respostas acima, e os pontos que eles colocam são muito importantes. Mas um que parece ter sido esquecido é que, se você tem um conjunto abrangente de testes de unidade, eles são lidos como uma especificação extremamente detalhada do código. Se você omitir a validação de teste apenas porque o código é tão fácil, é difícil ver como isso pode dar errado, parte de sua especificação está faltando. Se eu entrasse em uma equipe onde esses testes haviam sido perdidos, eu assumiria que seu serviço não estava validando seus argumentos.
fonte
Código é código. Você deve tentar obter 100% de cobertura ao testar. Se não fosse importante, não estaria lá.
fonte