TDD:测试构造函数设置属性是否有意义?

Tho*_*ock 5 .net c# tdd unit-testing

[TDD新手]

我有一辆带有颜色和品牌属性的汽车.

在TDD中测试构造函数是否设置了这些属性是否有意义?或者我等待测试(并实施)直到我需要它?

那么,我是否构建了这样的测试:

(C#)

public class CarTests
{
  public void Constructor_Should_Set_Color()
  {
    var car = new Car("Green", "Volvo");

    Assert.Equals(car.Color, "Green");
  }
}
Run Code Online (Sandbox Code Playgroud)

或者我等到我有一个用例场景,例如,我必须从使用构造函数构建的列表中筛选所有绿色汽车,这将失败,因为汽车将为null作为颜色?

直接测试构造函数真的有意义吗?怎么样Equals()?

Car*_*ter 8

理想情况下,我认为,在您需要之前,您甚至不会拥有 Color属性.此时,您可能只使用setter,或者可以将其添加到构造函数中,或者添加新的构造函数.第二个选项使您处于具有两个(或更多)构造函数的状态 - 您可能会发现它很有用; 在许多情况下(对于测试和"常规"代码),您可能不关心汽车的颜色.而是试驾您的设计.


Adr*_*ore 5

它似乎取决于开发人员/开发人员团队的环境和偏好,就像是否在一个测试方法中有几个不同的断言一样.

虽然纯粹主义者可能希望接近100%的测试覆盖率,但也有开发人员只测试非平凡的东西.这两个极端之间的界限很模糊.


Don*_*oby 5

如果您实际上正在进行TDD,那么在测试需要它们存在之前,您将不会拥有颜色和品牌属性.

该测试可能不应该像您的构造函数测试,而是测试关注Color或Brand的其他东西.