我正在MVCStoreFront应用程序上观看Rob Connerys的网络广播,我注意到他正在对甚至是最平凡的东西进行单元测试,例如:
public Decimal DiscountPrice
{
get
{
return this.Price - this.Discount;
}
}
将进行如下测试:
[TestMethod]
public void Test_DiscountPrice
{
Product p = new Product();
p.Price = 100;
p.Discount = 20;
Assert.IsEqual(p.DiscountPrice,80);
}
尽管我全都用于单元测试,但有时我想知道这种形式的测试优先开发是否真的有用,例如,在实际过程中,您的代码上方有3-4层(业务请求,需求文档,体系结构文档) ,可能会误定义实际定义的业务规则(折扣价为价格-折扣)。
如果是这种情况,您的单元测试对您没有任何意义。
此外,单元测试是另一个失败点:
[TestMethod]
public void Test_DiscountPrice
{
Product p = new Product();
p.Price = 100;
p.Discount = 20;
Assert.IsEqual(p.DiscountPrice,90);
}
现在测试有缺陷。显然,在一个简单的测试中,这没什么大不了的,但是说我们正在测试一个复杂的业务规则。我们在这里能获得什么?
在维护开发人员对其进行维护时,将应用程序的生命快进了两年。现在企业改变了规则,测试再次中断,一些新秀开发人员随后错误地修复了测试……我们现在又遇到了一个失败点。
我所看到的是更多可能的失败点,没有实际的收益,如果折扣价格错误,测试团队仍会发现问题,单元测试如何节省任何工作?
我在这里想念什么?请教我爱TDD,因为到目前为止我很难接受它。我也想要,因为我想保持进步,但这对我来说毫无意义。
编辑:几个人不断提到测试有助于实施规范。根据我的经验,规范也经常出错,但是也许我注定要在一个规范由不应该编写规范的人编写的组织中工作。