InfoQ

新闻

谁来检查我们的单元测试?NCover2!

作者 王翔(Vision Wang) 发布于 2007年10月10日 下午9时6分

社区
.NET
主题
工件和工具,
交付价值,
单元测试
标签
测试驱动开发,
Visual Studio,
NUnit,
测试,
代码覆盖率

随着NUnit和Visual Studio.NET 2005的推出,对.NET代码作单元测试似乎越来越容易了,而且更加自动化。但您是否考虑过这些单元测试是否真正“有效”呢?还是仅仅自我安慰的“额外工作量”呢?NCover起码可以帮忙做做检查。以前NCover是个开源的框架,最近它已经被商品化了。

Gnoso把NCover升级成为2.0版,并把它商品化了。虽然,之前通过开源方式可以获得NCover,但可能因为它定位的领域太吸引人了,以至于它的升级速度和集成性方面反倒总是差强人意。NCover是一个用来检查.NET单元测试代码与实际代码覆盖分析的工具,它在执行单元测试的过程中对执行情况进行监测,然后会记录下单元测试都调用过哪些代码,不过最重要的是它记录下哪些代码实际没有被单元测试掉用到。你也许觉得“我严格按照Write a little,Test a little”的步骤在编写单元测试,就是漏掉也很显眼,因为我写了[todo]了,但事实情况并非如此:

  • 面向对象一个特点就是多态,虚方法、抽象方法、重载方法、委托这些都很可能成为您察看不到的“死角”;
  • 1000行的代码也许做这么一次覆盖检查不麻烦,不过如果您负责一个1,000, 000行代码的项目,想看看大家是不是把该做的单元测试都作了,恐怕要写要记录的东西不是3、4个人可以做得来的;
  • 这些都不算最坏的情况,软件界有一个不变的规律就是变化本身,如果增加或者修改掉了一块功能,单凭人工在代码中翻腾一次这个经历就太痛苦了,不过这还没有短痛,都是长痛,别忘了唯一不变的就是变化。

虽然不一定特别权威,但NCover起码从覆盖角度告诉我们“你的单元测试做的是否够好”。很多人更喜欢它是因为他无须象其他类似工具在代码上增加“痕迹”,它可以直接在生产代码上进行检查,而且可以对Web Service和.NET Windows Service这些后台服务类代码进行检查。此次2.0产品化版本中,主要对产品得易用性作了较大改善,以前游离在外面的NCoverExplorer被集成到NConver里面,这样检查报告看起来更加人性化,而且还支持同时看多个项目(Project),毕竟.NET项目开发一般都是Solution层次的,一遍遍打开每个项目的报告确实惹人烦。企业版中还有一个特别有用的特性,就是可以把执行路径画出来,并记录下每个步骤的执行时间,相信您以前总碰到过类似的困扰——“到底怎么了,为什么跑得这么慢啊?”。NCover可以用图形化的方式展现这个执行过程。生产代码检查+Assembly检查+可视化执行路径,相信NCover会成为性能调整和代码优化的得力工具。

商品化之后,试用NCover感觉比以前舒服多了(不过要收100$+的使用许可了)。相信对于开发团队,尤其是“代码就是设计”的敏捷团队而言,NCover也可以作为一个不错的把关工具。

testing the requirements! 发表人 yin cheng 发表于 2007年10月12日 下午12时7分
  1. 返回顶部

    testing the requirements!

    2007年10月12日 下午12时7分 发表人 yin cheng

    No perfect software, but software should delivery requirments. Continuous Testing, integration is the key. If budget can not afford, unit test could be skipped, but some of them can not, this is depending on your experience.

深度内容

模块化Java:声明式模块化

本文是模块化Java系列文章的第4篇,介绍的是声明式模块化。文中描述了组件如何以声明的方式来定义并组织在一起,而无需让代码依赖于OSGI API。

Ian Robinson和Jim Webber谈论基于Web的整合

本采访是在伦敦举行的QCon2009上记录的,Ian Robinson和Jim Webber探讨了如何将Web作为整合平台以及REST在理论上和实践中的好处。

项目管理修炼之道(精选版)

项目管理对于项目成败至关重要,但实践中每个项目都有自己的独特性,没有现成的解决方案可以套用。书中从应对实际风险的角度出发,讲述了从项目启动、项目规划到项目结束的整个管理流程,展示了作者的思考过程。本迷你书从原书中精选出5个章节。

那是鸟,还是飞机?不,那是超人!

在这个演讲中,Fred将会揭示敏捷的一些外在因素,并会重点关注敏捷获得成功的内在原因。从案例研究和真实的项目经验来看,Fred认为:工具、管理体系都不能让你变得敏捷。敏捷的成功,植根于士气高涨、充分授权的工作者身上,他们能够以不同以往的方式思考问题。

访谈和书摘:Eben Hewitt的新书《Java SOA Cookbook》

Java SOA Cookbook

Eben Hewitt的新书《Java SOA Cookbook》从Java实现的角度讨论了面向服务架构。Eben在书中讨论了SOA基础、工具、最佳实践和SOA治理等主题。

Mark Richard的《Java消息服务》第二版

Mark Richards的新书《Java消息服务》第二版覆盖了JMS的许多主题, 包括发布和订阅模式以及点对点模式,消息过滤和事务等。InfoQ与Mark谈论了跟他的新作。

模块化Java:动态模块化

本文是“模块化Java”系列文章的第三篇,讨论动态模块化,内容涉及如何解析bundle类、bundle如何变化、以及bundle之间如何通信。

让测试也敏捷起来

对于测试组织来说,敏捷方法带来的快速迭代却让测试本身变得困难起来:缺乏“足够详细的文档”,缺乏“仔细设计用例的时间”等等。在本演讲中,段念将与大家探讨如何在敏捷过程中进行测试。