面向.NET 的IntelliTest-用较少的工作量去覆盖更多的测试

[原文发表地址] IntelliTest for .NET - Test More with Less (effort)

[原文发表时间] 2015-09-30 6:55 AM

在测试中,编写一套可以透彻的演练和验证代码中的逻辑的单元测试是很不容易的。这甚至被认为是得不偿失的。幸运的是,在VS2015企业版中发布的IntelliTest feature 中植入了这两大关切。它可以帮助你在花费一小部分开销的前提下达到很高的代码覆盖。

当你在你的.NET代码中运行IntelliTest时,它将通过动态分析正在公共语言运行库中运行的测试来生成测试用例。对于代码中的每一条语句,它都将精心编排一个输入,这个输入将到达特定语句,来为每一个条件分支进行用例分析--是否语句,断言,以及所有会抛出异常的操作—这更像白盒测试。目标是为你的代码生成一整套覆盖了所有分支的测试。那么因此每次它编排一个输入来增加(测试)覆盖时,它都将发出具体的值作为一个测试用例,用C#和MSTest, xUnit.net, 或者 Nunit 中的一种作为测试框架。所得到的是一套紧凑的高覆盖率的测试,并且你并不需要从零开始编写。

IntelliTest flow

备注:IntelliTest 提取于Pex project有几个不同的版本体现。这起源于Visual Studio的扩展。在Visual Studio 2015 RC 之前,它被称为“智能单元测试 ”。 通过所有这些改变,无论如何,基础的APIs 和命名空间还是被保留了下来,所以你在这些较早期的版本中创建的专业定制以及扩展仍都可以利用。实际上,任何你在之前(的版本)写的Pex 扩展都将可能与IntelliTest协同工作。

使编写和维护单元测试变得更容易

以下是IntelliTest正在尝试解决的问题。

· 问题1:要为一个复杂的代码写一个完备的测试包 会花费与写这些受测试代码相当的努力。因此,有了倾向避免写这些测试,导致了测试漏洞以及对已经在开发活动后完成集成测试的依赖。Bugs在开发周期中被发现的比较晚(如果有的话)。而且要被在时间和空间上从导致Bugs的代码行移除,这就意味着修改这些Bugs的耗费明显会比在开生命周期中较早发现Bugs要高得多。

· 问题2:当待测试代码不断改进时,维护测试是很有挑战的。这导致了不愿在一开始就创建测试,导致了测试漏洞以及集成问题(问题1)。

IntelliTest处理了这些问题,它通过用白盒测试方法来处理代码复杂的问题,即它在执行和整合精确的测试输入时来分析你的代码获得高的覆盖率,它削减了在通过用这些输入来自动生成测试用例以及从被测试代码抓取一些明显的输出这两方面的工作量。这消除了随着待测试代码的改进而自动改进测试包这样的大量的维护测试的挑战(当你重新执行IntelliTest时). 它通过集成到Visual Studio中并且右键单击来开启bugs的早期探测,那么你可以把它引用到你的日常开发工作流中。

这些问题同时出现在已经存在的遗留代码以及新的代码中,一种集成测试的结合,以及或许少量手写的单元测试(似乎遵循令人愉快的道路),这在上下文中是远远不够的。IntelliTest正是在这里能够扩充你的已经存在的测试实践:

· 改进 现有/遗留 的代码:在开始重构之前,用IntelliTest生成测试的一个安全网。

· 探测 现有/ 新 的代码:使用IntelliTest来理解针对不同的数据值的代码的 输入/输出 行为。这可以作为一个单元测试的低摩擦介绍。

 了解更多

除了这篇博客介绍过的,IntelliTest还有更多的内容,那么你可以从下面这些额外的资料中了解更多。

· Visual Studio 工具箱: IntelliTest:一个最新的channel 9 视频。

· IntelliTest - 实例: 一个IntelliTest在真实项目中的实例演练。

· 介绍智能单元测试, 智能单元测试- 一种思想模型, 和 Visual Studio 2015 - 通过智能单元测试创建更好的软件: 高度概览了这是关于什么特性以及其内部运行机制。

· IntelliTest - 一个测试来管控所有: 通过运用一个包含了部分测试代码的规范的参数化单元测试来驱动测试用例的生成。

· 单元测试生成器扩展性 - 向我们的社区致敬: 参加致力于为对应的测试框架提供支持的NUnit 和xUnit.net社区。通过可以在这儿安装的开源插件您可以做到。

· 智能单元测试 - 面向代码绑定的测试, 测试用例管理: IntelliTest如何按照要求改进已经生成的测试。

· IntelliTest 归档: MSDN 上的资料。

 像往常一样,我们欢迎您的反馈。您可以在这里或上面者任何一个链接的其他文章留下您的评论,通过Visual Studio 的发送笑脸功能, 用户之声, 以及Twitter发送反馈, 并且将您的疑问打上一个“IntelliTest”的标签,发送到MSDN论坛或者Stack Overflow上。