IntelliTest(0) - Introducing Smart Unit Tests[译]

[作者提醒:从Visual Studio 2015 RC 版本开始,“Smart Unit Tests”已经更名为“IntelliTest”]

??关于IntelliTest,有一个短视频,如果你还没看过,强烈建议去看一下。其中介绍了IntelliTest给测试开发带来的新特性,这些新特性将帮助开发者克服在初写单元测试时的惰性。除了视频中所描述的那部分,IntelliTest还包括许多其他特性,这一系列的博客将完善你对整个IntelliTest的知识。

??首先,我们来回忆一下视频中的一个例子 - 你正在开发,此时必须要修改一段代码,而这段代码是未被单元测试覆盖的。在开始之前,我们可能希望可以在单元测试框架的帮助下,确保代码能够始终正常工作,但这说起来容易做起来难。我们极有可能面临如下几个问题:

  • 这份代码可能是难以测试的,它也许对外界有许多依赖,这些依赖都需要被隔离,如果不清楚这些依赖,我们将难以下手。
  • 测试覆盖的质量也是一个需要考虑的问题。关于测试覆盖质量的衡量,有许多可以参考的维度,比如:语句覆盖、路径覆盖、组件覆盖等。即使这些衡量的维度已经很充足,我们依然需要更高的代码覆盖率和更多的断言验证,以保证代码的充分测试。要写出好的测试用例并不容易,我们极有可能反复写出重复执行相同路径的测试用例。或者,我们只是写出那些更容易想到的测试用例。因此,我们很难确保我们的代码在所有的边界情况都能符合预期的运行。
  • 更坑爹的是,我们可能根本不知道断言放在哪里 - 想象一下你正在修改一堆逻辑复杂而你又不熟悉的代码吧。

??IntelliTest试图解决以上这些问题。它会探索到你代码里的所有路径,然后自动生成覆盖这些路径的输入,并记录相应输出。这些输入就是一组高覆盖率的测试用例。下面就是文章开头所提到的视频中的例子截图:

默认情况下,如果你仅仅是在一个函数上运行IntelliTest,它会探测函数的执行路径,并生成相应的输入。在这个阶段除非测试用例发生了运行是错误,否则它会认为这个测试用例通过 - 毕竟,这些都是函数自己的逻辑,IntelliTest不验证逻辑的正确与否。对于还没有单元测试的代码来说,这一点尤其有用,你可以基于这些用例做回归测试。

??除此之外,如果你写了断言来验证代码的正确性,IntelliTest会利用你的断言,保证每一个输入都能正确处理。当被测代码改变后,再次运行IntelliTest,它就会自动更新测试用例。

??如果以上内容让你产生了兴趣,那将是对我极大的鼓舞,在接下来的博客中,我们会继续更加深入的讨论IntelliTest的特性。同时,你也可以阅读这篇文章,如果有任何问题,请在评论中告诉我,我们一起讨论,并解决之。

强烈建议阅读英文原文

date: 2017-10-20 07:43:52

原文地址:https://www.cnblogs.com/erdao/p/8419717.html

时间: 2024-12-11 15:53:06

IntelliTest(0) - Introducing Smart Unit Tests[译]的相关文章

IntelliTest(3) - Test to Code Binding, Test Case Management[译]

[作者提醒:从Visual Studio 2015 RC 版本开始,"Smart Unit Tests"已经更名为"IntelliTest"] ??在这篇文章中,我们讲到IntelliTest如何自动生成测试用例,以及当被测代码改变时,如何更新这些用例.针对一段被测代码,IntelliTest会生成一个PUT方法,和一个或多个测试用例方法.在下面的示例图中,展示了以Pex开头的特性的使用,它用于定义用例和被测代码的约束关系,这些特性都定义在Microsoft.Pex

IntelliTest(2) - A mental model[译]

[作者提醒:从Visual Studio 2015 RC 版本开始,"Smart Unit Tests"已经更名为"IntelliTest"] ??在这篇文章中,我们介绍了IntelliTest,如果你还没有阅读过,强烈建议先阅读它. ??我们接着讨论IntelliTest的相关内容.IntelliTest是怎么自动生成高覆盖率的测试用例的?它运行的原理是什么?如果可以将其运行原理抽象成模型,对我们理解并使用它都大有帮助. 运行时的检测和监控是IntelliTest

IntelliTest(4) – Hands on[译]

??在我们写传统单元测试时,为了达到一定的覆盖率,开发者需要反复的做一些类似的工作,比如,写测试用例,查看哪些代码未被覆盖,继续写测试用例覆盖之,直到所有的代码都被覆盖. ??有了IntelliTest后,这一切都变得不一样了.我们会手把手的介绍IntelliTest技术,为了便于大家理解,会使用一个demo项目. 一.准备demo项目 ??按照上面给出的GitHub地址,克隆项目后,打开PokerLeagueManager.sln.这个demo主要用于跟踪统计每周的扑克牌联赛数据,每个玩家的游

IntelliTest(1) - One Test to rule them all[译]

??在传统单元测试方案中,每个测试用例代表一个使用场景,开发者可以使用断言来验证每种场景下的输入和输出是否符合预期. ??针对相对少量的测试用例来说,此方案似乎已足够,但是,那些做了多年开发的老鸟们深知,即使经过相对较全面测试的代码,依然潜伏着bug,就像一个常规的输入可以得到正确的结果,但是换一个类似的但是未经测试的输入,它就神奇的崩了. 传统单元测试的生成 ??IntelliTest可以生成传统单元测试用例.当在一段被测试代码上运行IntelliTest时,它会尽量去生成高覆盖率的单元测试用

IntelliTest(5) - The IntelliTest Reference Manual[译]

??有一套非常棒的工具集将大大提高我们的工作效率,选择一个正确的工具和让这个工具做它擅长的事情也是非常重要的.工具集越大,就越容易找到适合你当前工作的工具. ??不管使用任何工具,为了让它发挥更大的性能,了解它的功能,它的短板,以及它最擅长的事情都是相当重要的.IntelliTest就是一个功能强大,但相对复杂的工具,要说明这一点很容易,回答如下三个问题: 它可以帮助我们做什么? 它的短板在哪里? 作为开发者,我们怎样可以最大化的利用它功能? 要回答这些问题,可以通过查看博客,浏览介绍文档,或者

[译]如何定义python源文件的文件编码

简介 这篇文章是为了介绍定义python源文件文件编码的方法.python解释器可以根据所指定的编码信息对当前文件进行解析.通常来说,这种方法可以提高解析器对Unicode编码的源文件的识别,并且支持书写Unicode编码,例如在一个支持unicode编码的编辑器中使用UTF-8. 问题 在python2.1中,unicode编码只能通过Latin-1中的“unicode-escape”的方式来实现.这让很多平时不使用Latin-1编码的用户感到非常的不友好,尤其是大多数的亚洲国家更是这样.程序

[Python Test] Use pytest fixtures to reduce duplicated code across unit tests

In this lesson, you will learn how to implement pytest fixtures. Many unit tests have the same resource requirements. For example, an instantiated object from a class. You will learn how to create the instance of the class one time as a fixture and r

Nutch 1.0 源代码分析[8] CrawlDb

Nutch 1.0 源代码分析[8] CrawlDb 24MAR 2010 18:44:08 +0800 ---------------------------------------------------------------------------- 再接下来Crawl类中的重要的一行就是: http://c.tieba.baidu.com/p/3312872854 http://c.tieba.baidu.com/p/3312894881 http://c.tieba.baidu.co

Hadoop2.2.0分布式环境配置笔记2-编译64位hadoop源码

11.配置hadoop分布式环境!  三台机器都需要这么配置 1).将/opt/modules/hadoop-2.2.0-src重命名  mv /opt/modules/hadoop-2.2.0-src/ /opt/modules/hadoop-2.2.0-src_x32_back 2).解压64位源码 tar -zxvf /opt/modules/hadoop-2.2.0-src_x32_back/hadoop-dist/target/hadoop-2.2.0.tar.gz -C /opt/m