测试驱动开发上的五大错误
作者:网络转载 发布时间:[ 2013/3/15 10:56:41 ] 推荐标签:
3、一次测试太多的项目
看看下面的单元测试,请在不使用“和”这个词的情况下描述它:
[TestMethod]
public void ProductPriceTests()
{
// Arrange
var product = new Product()
{
BasePrice = 10m
};
// Act
decimal basePrice = product.CalculatePrice(CalculationRules.None);
decimal discountPrice = product.CalculatePrice(CalculationRules.Discounted);
decimal standardPrice = product.CalculatePrice(CalculationRules.Standard);
// Assert
Assert.AreEqual(10m, basePrice);
Assert.AreEqual(11m, discountPrice);
Assert.AreEqual(12m, standardPrice);
}
我只能这样描述这个方法:
“测试中计算基价,打折价和标准价是都能否返回正确的值。”
这是一个简单的方法来判断你是否一次测试了过多的内容。上面这个测试会有三种情况导致它失败。如果测试失败,我们需要去找到那个/哪些出了错。
理想情况下,每一个方法都应该有它自己的测试,例如:
[TestMethod]
public void CalculateDiscountedPriceReturnsAmountOf11()
{
// Arrange
var product = new Product()
{
BasePrice = 10m
};
// Act
decimal discountPrice = product.CalculatePrice(CalculationRules.Discounted);
// Assert
Assert.AreEqual(11m, discountPrice);
}
[TestMethod]
public void CalculateStandardPriceReturnsAmountOf12()
{
// Arrange
var product = new Product()
{
BasePrice = 10m
};
// Act
decimal standardPrice = product.CalculatePrice(CalculationRules.Standard);
// Assert
Assert.AreEqual(12m, standardPrice);
}
[TestMethod]
public void NoDiscountRuleReturnsBasePrice()
{
// Arrange
var product = new Product()
{
BasePrice = 10m
};
// Act
decimal basePrice = product.CalculatePrice(CalculationRules.None);
// Assert
Assert.AreEqual(10m, basePrice);
}
注意这些非常具有描述性的测试名称。如果一个项目里有500个测试,其中一个失败了,你能根据名称能知道哪个测试应该为此承担责任。
这样我们可能会有更多的方法,但换来的好处是清晰。我在《代码大全(第2版)》里看到了这句经验之谈:
为方法里的每个IF,And,Or,Case,For,While等条件写出独立的测试方法。

sales@spasvo.com