Desenvolvimento Orientado a Testes significa que você interrompe a codificação quando todos os seus testes forem aprovados.
Se você não tem um teste para uma propriedade, por que deveria implementá-lo? Se você não testar / definir o comportamento esperado no caso de uma atribuição "ilegal", o que a propriedade deve fazer?
Portanto, estou totalmente a favor de testar todos os comportamentos que uma classe deve apresentar. Incluindo propriedades "primitivas".
Para tornar esse teste mais fácil, criei um NUnit simples TestFixture
que fornece pontos de extensão para definir / obter o valor e leva listas de valores válidos e inválidos e tem um único teste para verificar se a propriedade funciona bem. O teste de uma única propriedade pode ser assim:
[TestFixture]
public class Test_MyObject_SomeProperty : PropertyTest<int>
{
private MyObject obj = null;
public override void SetUp() { obj = new MyObject(); }
public override void TearDown() { obj = null; }
public override int Get() { return obj.SomeProperty; }
public override Set(int value) { obj.SomeProperty = value; }
public override IEnumerable<int> SomeValidValues() { return new List() { 1,3,5,7 }; }
public override IEnumerable<int> SomeInvalidValues() { return new List() { 2,4,6 }; }
}
Usando lambdas e atributos, isso pode até ser escrito de forma mais compacta. Percebi que o MBUnit tem até suporte nativo para coisas assim. O ponto, porém, é que o código acima captura a intenção da propriedade.
PS: Provavelmente o PropertyTest também deve ter uma maneira de verificar se outras propriedades do objeto não foram alteradas. Hmm .. de volta à prancheta de desenho.