|
|
|
|
移动端

2.4.1 单元测试的重要性及核心意义

《.NET框架设计: 模式、配置、工具》第2章C#、.NET Library高级应用,本章主要是巩固C#的基础知识及使用C#开发框架的必需技术,只有灵活地使用,才能满足设计时的各种需要。本节为大家介绍单元测试的重要性及核心意义。

作者:王清培来源:人民邮电出版社|2015-03-03 14:33

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

2.4.1 单元测试的重要性及核心意义

首先需要说明的是,单元测试并不只是为了验证你目前所写的代码有没有问题,它更为重要的作用是,你一次编写好的测试用例是否可以在日后随时随地地运行,来验证你本次所修改的代码是否影响到了以往的业务逻辑。单元测试是一种保证你所写的代码在整个生命周期中都不会出BUG的防护墙,是具有重要价值的软件过程制品之一。

正是因为可以在日后随时随地保证代码的质量,所以我们就可以随时随地地进行重构,而不需要害怕自己的修改是否会使以往的代码出现BUG。毕竟大部分情况下我们都是在维护一个大型的系统,大型系统的生命周期很漫长,中间会有新功能的添加和旧功能的重构,所以单元测试是非常需要的,应该引起重视。如果没有单元测试,很难保证代码在一两年之后还是清晰的,那就更谈不上“价值”二字了。

下面我们先来看一段简单的逻辑。

  1. namespaceFrameworkDesign.Demo.CodeSource  
  2. {  
  3. public class ProductCollection  
  4.     {  
  5. public List<Product> Products { get; set; }  
  6.  
  7. public List<Product>DistributeProduct(List<int> ids)  
  8.         {  
  9. if (ids == null || ids.Count == 0) return new List<Product>();  
  10.  
  11. var result = from item in Products where ids.Contains(item.PId) select item;  
  12.  
  13. DistributeNotice notice = new DistributeNotice();  
  14. notice.ToNotice("配送商品");  
  15.  
  16. returnresult.ToList();  
  17.         }  
  18.     }  
  19.  
  20. public class Product  
  21.     {  
  22. public string PName { get; set; }  
  23. publicintPId { get; set; }  
  24.     }  
  25.  
  26. public class DistributeNotice  
  27.     {  
  28. public void ToNotice(string mes) { }  
  29.     }  

DistributeProduct方法将根据传递进来的Ids集合确定到底需要配送哪些商品,接着使用DistributeNotice对象发送一个配送通知消息出去。

下面我们需要为这段代码编写单元测试用例,来验证其是否满足所有的功能性要求和部分非功能性要求。代码如下所示。

  1. namespaceFrameworkDesign.Demo.CodeSource.Tests  
  2. {  
  3.     [TestClass]  
  4. public class ProductCollectionTests  
  5.     {  
  6.         [TestMethod]  
  7. public void ProductCollection_DistributeProduct_Test()  
  8.         {  
  9. ProductCollectiontestObject = new ProductCollection();  
  10. testObject.Products = new System.Collections.Generic.List<Product>()  
  11.                 {  
  12. new Product(){ PId=1,PName="1"},  
  13. new Product(){ PId=2,PName="2"},  
  14. new Product(){ PId=3,PName="3"}  
  15.                 };  
  16.  
  17. vartestResult = testObject.DistributeProduct(new System.Collections.Generic.List<int>() { 1, 2 });  
  18.  
  19. Assert.AreEqual(testResult.Count, 2);  
  20. Assert.AreEqual(testResult[0].PId, 1);  
  21. Assert.AreEqual(testResult[1].PId, 2);  
  22.         }  
  23.     }  

以上代码是对DistributeProduct方法做常规的功能性验证,看基本功能是否已经完成。

我们实例化了一个被测试对象testObejct,添加了3条测试数据,然后调用测试方法,最后断言方法所返回的数据是否正确。如果这个时候有人修改了DistributeProduct方法,导致该方法内部的逻辑发生错误,当你运行测试用例时就会发现该用例是运行不成功的,就会立马暴露出程序中的BUG。这是一个很简单的单元测试代码,但是足以让你明白单元测试的基本作用。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

高质量程序设计指南:C++/C语言(第3版)

本书以轻松幽默的笔调向读者论述了高质量软件开发方法与C++/C编程规范。它是作者多年从事软件开发工作的经验总结。本书共17章,第1章到第4...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊