Pergunta

Eu preciso de um teste de unidade para se certificar de que estou acumulando horas de férias corretamente. Mas horas de férias acumular de acordo com uma regra de negócio, se as mudanças de regras, então as quebras de teste de unidade.

Esta é aceitável? Devo expor a regra através de um método e, em seguida, chamar esse método, tanto o meu código e meu teste para garantir que o teste de unidade não é tão frágil?

A minha pergunta é: Qual é a maneira correta de regras de negócio de teste de unidade que pode mudar

Foi útil?

Solução

Os testes devem garantir que o código obedece corretamente a regra de negócio. Portanto, eu não iria testes de escrita que vão em torno da regra de negócio ou contar com o próprio código de regras de negócios. Ao contrário, quando as mudanças de regras de negócios, gostaria de mudar primeiro o teste para refletir a nova regra de negócio, então quando meu código não passar no teste, ir e corrigir o código para que ele passa no teste.

O que você não quer que aconteça é para escrever o seu teste de modo que quando você mudar a forma como a mesma regra de negócio é aplicada, que suas pausas de teste. Isso é mais fácil dizer do que fazer, mas essencialmente o que você quer testar é o mínimo necessário para implementar a regra sem ditar muito estreita como o código é implementado. Se o resultado da regra é diferente, embora, então você deve estar mudando o teste primeiro, depois o código para combiná-lo.

Você também não quer que o teste para ser acoplado a dados específicos, também. Diga ao fazer um cálculo de imposto, o teste não deve ser escrito para supor que a classe sob teste usa 5% como o imposto. Em vez disso, você deve escrever o seu teste para que ele fornece o percentual de impostos, e, em seguida, verifica se o cálculo for feito corretamente. Presumivelmente, você terá um intervalo de valores para teste para certificar-se de que valores fora da faixa são capturados também. Um resultado disto é que você vai ter um projeto melhor, pois isso vai ajudar você a evitar valores codificados e fazer o seu código de produção mais flexível a mudanças nos dados.

Outras dicas

Eu tenho uma configuração semelhante - no entanto as minhas regras de negócios são compilados, mas têm opções configuráveis ??(seu pode variar). Quando uma regra de negócio muda uma maneira núcleo em que atua, a minha unidade de testes de ruptura. Este é realmente o esperado - e bom! Isso significa que eu posso isolar quaisquer ondulações inesperados em todo o meu sistema e atualizar os testes para combinar as alterações.

Se as regras são externos (algum tipo de linguagem de script ou sproc banco de dados), então você vai precisar para envolvê-los em um teste de integração e fio até seus testes de integração para execução automática. Embora não mais um teste de unidade, testes de integração são bastante importantes também, e irá ajudá-lo da mesma maneira como testes de unidade para evitar ondulações inesperados devido a uma mudança de regras de negócios.

Parece que você tem regras de negócio, e então você tem clientes dessas regras de negócio. Se os dois podem variar independentemente, seria sábio para projetar sua API em conformidade.

Conforme apresentado, a sua pergunta soa como ele pode ser resolvido com o uso adequado do padrão Strategy. A estratégia representa suas regras de negócios, para que você possa teste de unidade aqueles em um contexto pura sem se preocupar com o cliente.

Quando as mudanças de regras de negócio, pode fazer mais sentido simplesmente deixar a velha estratégia como está (no caso de você precisar dele novamente mais tarde), e escrever (e teste de unidade) uma nova estratégia que representa a nova regra de negócio .

Quando você está completamente feito com a nova estratégia, você pode substituir a Estratégia no cliente.

Quando a unidade testar o cliente, você deve fazer isso contra uma dupla estratégia de teste (como um Mock ou Stub) para verificar se o cliente interage correctamente com a Estratégia sem depender de qualquer implementação de estratégia particular.

Desta forma, você começa separação clara das preocupações e você manter sua unidade testa sustentável. Você também obedecer ao Princípio aberto / fechado.

Parece correto que o teste falhar se as regras são alteradas -. Que é de se esperar

Você pode torná-lo mais fácil de manter o teste no futuro, se você usar um dispositivo elétrico dados em vez de valores codificados no próprio teste. Por exemplo, se o seu método deve retornar foo, você pode ter que, no dispositivo elétrico. Quando você altera a lógica de negócios, você simplesmente alterar o dispositivo elétrico e você não terá que ir através do próprio teste de unidade.

Claro, isso depende muito do tipo de lógica que você está testando, e pode não ser sempre o caso.

Eu acho que é uma questão incorreta Regra de Negócios e teste de unidade estão em diferentes níveis de abstração. regra de negócio é no nível mais alto de abstração (Business Modeling), mas teste de unidade é para testar uma unidade de código que está em menor nível de abstração para que você não pode usar unidade de teste para validar ou verificar um negócio regra. Além disso, uma regra de negócio após a análise e design pode afetar em várias unidades de códigos-lo novamente você não pode usar unidade de teste para validar ou verificar uma regra de negócio . Eu acho que você pode usar caso de teste ou BDD Cenário para validar e verificar uma regra de negócio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top