Este método de escrever Testes de Unidade está correto?

4

Eu criei um pequeno projeto em C # para ajudar-me a aprender a escrever bons testes unitários. Eu sei que uma regra importante do teste de unidade é testar a menor 'unidade' de código possível, de modo que, se falhar, você saiba exatamente qual parte do código precisa ser corrigida. Preciso de ajuda com o seguinte antes de continuar a implementar mais testes de unidade para o projeto:

Se eu tenho uma classe Car , por exemplo, que cria um novo objeto Car que possui vários atributos que são calculados quando seu método construtor é chamado, os dois testes seguintes seriam considerados um exagero? Deve haver um teste que testa todos os atributos calculados do objeto Car ?

    [Test]
    public void CarEngineCalculatedValue()
    {
        BusinessObjects.Car car= new BusinessObjects.Car();
        Assert.GreaterOrEqual(car.Engine, 1);
    }

    [Test]
    public void CarNameCalculatedValue()
    {
        BusinessObjects.Car car= new BusinessObjects.Car();
        Assert.IsNotNull(car.Name);
    }

Devo ter os dois métodos de teste acima para testar essas coisas ou devo ter um método de teste que afirma que o objeto Car foi criado pela primeira vez e testar essas coisas no mesmo método de teste?

    
por Theomax 11.07.2012 / 15:25
fonte

2 respostas

16

Para mim, um caso de teste de unidade (método) deve testar um único cenário de teste. Isso pode exigir várias afirmações, e IMO isso é bom. Como os dois métodos de teste estão exercitando o mesmo cenário (criando um objeto e garantindo que ele esteja em um estado inicial consistente), eu os mesclaria em um único caso de teste.

Quanto a como discernir exatamente o que falhou em várias afirmações, todos os métodos de asserção em que consigo pensar têm sobrecargas com um parâmetro de mensagem extra - use isso com sabedoria para fornecer mensagens de falha claras.

    
por 11.07.2012 / 15:32
fonte
8

Eu preferiria a abordagem dos dois métodos. Quando um morre, você sabe especificamente porque morreu e pode consertá-lo mais rápido. Você não precisa testar tanto se os requisitos alterarem parte dos atributos.

Não é a pior coisa do mundo incluir alguns controles triviais como esses em um "o carro é construído adequadamente?" teste.

Os testes existem para o seu benefício, então faça o que mais lhe beneficia. Se os testes minúsculos são tão irritantes que eles não são escritos, isso é muito pior do que a menor questão de agrupá-los.

    
por 11.07.2012 / 15:34
fonte