单元测试自动实现的属性是否有价值

ahs*_*ele 7 c# tdd unit-testing arrange-act-assert

这似乎格外重手,但该规则会公开提供应测试什么应该自动实现的属性进行测试?

客户类

public class Customer
{
    public string EmailAddr { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

经过测试

[TestClass]
public class CustomerTests : TestClassBase
{
    [TestMethod]
    public void CanSetCustomerEmailAddress()
    {
        //Arrange
        Customer customer = new Customer();

        //Act
        customer.EmailAddr = "foo@bar.com";

        //Assert
        Assert.AreEqual("foo@bar.com", customer.EmailAddr);
    }
}
Run Code Online (Sandbox Code Playgroud)

ckr*_*mer 10

我通常认为任何不执行操作的代码都不值得测试.这通常意味着我不测试属性(自动实现或不自动),因为它们只是设置或返回值.

如果属性的getter或setter执行某种"工作",这将改变,例如可能根据某些其他field/property/whatever的状态返回两个(或更多)值中的一个.

如果你还没有看到它,我强烈推荐Roy Osherove 关于单元测试.它解决了各种"测试什么时候"类型的问题,包括这个问题.

  • 测试自动属性是测试框架,而不是测试您的代码:没有需要验证的代码逻辑。如果您最终在属性后面添加代码,您应该会看到测试覆盖率下降,这表明现在是时候测试该属性了。 (2认同)

Arn*_*rne 7

如果从自动实现的属性切换到完全不同的属性会发生什么?测试似乎是多余的,因为您知道实现 - 在编写测试时不应该考虑这一点.

当然,这取决于您实时更改实施的可能性.

  • 如果发生这种情况,你会先做一个测试吗?那么它将被测试.至少如果你做TDD将是它的工作方式.我们都知道人们并不总是先写他们的测试. (4认同)