测试驱动开发上的五大错误

发表于:2013-3-15 10:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  3、一次测试太多的项目

  看看下面的单元测试,请在不使用“和”这个词的情况下描述它:

  1. [TestMethod]  
  2. public void ProductPriceTests()  
  3. {  
  4.     // Arrange  
  5.     var product = new Product()  
  6.     {  
  7.         BasePrice = 10m  
  8.     };  
  9.      
  10.     // Act  
  11.     decimal basePrice = product.CalculatePrice(CalculationRules.None);  
  12.     decimal discountPrice = product.CalculatePrice(CalculationRules.Discounted);  
  13.     decimal standardPrice = product.CalculatePrice(CalculationRules.Standard);  
  14.      
  15.     // Assert  
  16.     Assert.AreEqual(10m, basePrice);  
  17.     Assert.AreEqual(11m, discountPrice);  
  18.     Assert.AreEqual(12m, standardPrice);  
  19. }

  我只能这样描述这个方法:

  “测试中计算基价,打折价和标准价是都能否返回正确的值。

  这是一个简单的方法来判断你是否一次测试了过多的内容。上面这个测试会有三种情况导致它失败。如果测试失败,我们需要去找到那个/哪些出了错。

  理想情况下,每一个方法都应该有它自己的测试,例如:

  1. [TestMethod]  
  2. public void CalculateDiscountedPriceReturnsAmountOf11()  
  3. {  
  4.     // Arrange  
  5.     var product = new Product()  
  6.     {  
  7.         BasePrice = 10m  
  8.     };  
  9.      
  10.     // Act  
  11.     decimal discountPrice = product.CalculatePrice(CalculationRules.Discounted);  
  12.      
  13.     // Assert  
  14.     Assert.AreEqual(11m, discountPrice);  
  15. }  
  16.      
  17. [TestMethod]  
  18. public void CalculateStandardPriceReturnsAmountOf12()  
  19. {  
  20.     // Arrange  
  21.     var product = new Product()  
  22.     {  
  23.         BasePrice = 10m  
  24.     };  
  25.      
  26.     // Act  
  27.     decimal standardPrice = product.CalculatePrice(CalculationRules.Standard);  
  28.      
  29.     // Assert  
  30.     Assert.AreEqual(12m, standardPrice);  
  31. }  
  32.      
  33. [TestMethod]  
  34. public void NoDiscountRuleReturnsBasePrice()  
  35. {  
  36.     // Arrange  
  37.     var product = new Product()  
  38.     {  
  39.         BasePrice = 10m  
  40.     };  
  41.      
  42.     // Act  
  43.     decimal basePrice = product.CalculatePrice(CalculationRules.None);  
  44.      
  45.     // Assert  
  46.     Assert.AreEqual(10m, basePrice);  
  47. }

  注意这些非常具有描述性的测试名称。如果一个项目里有500个测试,其中一个失败了,你能根据名称就能知道哪个测试应该为此承担责任。

  这样我们可能会有更多的方法,但换来的好处是清晰。我在《代码大全(第2版)》里看到了这句经验之谈:

  为方法里的每个IF,And,Or,Case,For,While等条件写出独立的测试方法。

65/6<123456>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号