摘要:作为的标准库,单元测试框架是其他单元测试框架的基础。您可以使用和编写单元测试。官网地址单元测试覆盖工具代码覆盖工具在单元测试中也是需要的。代码覆盖率统计工具用于查找测试未覆盖的代码,提高单元测试的覆盖率。
在应用程序中,单元是软件的最小可测试部分,有一个或多个输入和一个输出。单元测试是一种测试软件代码单元的方法,通常包括一个或两个输入来产生一个输出。单元测试主要关注独立模块的功能正确性,目的是保证每个单元按照预期的方式运行。
为了进行单元测试,开发人员需要编写测试代码。单元测试有两种类型:手动测试和自动化测试。自动化通常是首选方法,可以为开发人员节省大量时间和精力。
单元测试是自动化测试金字塔模型中最大的测试类型。做好单元测试对保证软件产品的质量非常重要。单元测试可以:
软件缺陷的早期检测和早期修复。
在修复单元测试中发现的缺陷时,代码更改不会影响其他模块。
模块集成变得更加容易。
降低缺陷率和时间成本。
现在我们来总结一下Java、C++和Python语言单元测试中流行的测试工具。它们不仅包括单元测试框架,还包括模拟工具、代码覆盖工具和两个用于单元测试用例的智能自动生成工具:
朱尼特
测试
GoogleTest
pytest
单元测试
Jmockit
雅各布
gcov、lcov、gcovr
Coverage.py
EvoSuite
不同蓝色封面
单元测试框架
目前比较成熟的单元测试框架有JUnit、TestNG、gtest、pytest和unittest。
1)JUnit
JUnit是为Java编程语言设计的开源单元测试框架,由Kent Beck和Erich Gamma建立。它是单元测试框架家族中的一员,统称为xUnit,JUnit是xUnit家族中最成功的一个。Junit有自己的JUnit扩展生态系统,大多数Java开发环境都集成了JUnit作为单元测试的工具。JUnit的最新版本是JUnit 5,不再是单一的JAR包,而是由JUnit平台、JUnit Jupiter和JUnit Vintage组成。
官方网站地址:https://junit.org/junit5/
2)测试
TestNG是另一个为Java编程语言设计的开源单元测试框架。它是一个受JUnit和NUnit启发的测试框架,但它引入了一些新特性,使它更加强大和易于使用,例如:
核心特性是多线程测试执行,测试代码是否多线程安全;
提供注释支持;
支持黑盒测试(使用@ data provider);
支持参数测试;
强大的执行模型(不再有test suite);
支持各种工具和插件(Eclipse、IDEA、Maven等……);
嵌入BeanShell以获得更大的灵活性;
运行时和日志记录的默认JDK函数(无依赖性)。
官方网站地址:https://testng.org/
3)谷歌测试
GoogleTest是一个跨平台(Liunx、Mac OS X、Windows、Cygwin、Windows CE和Symbian)的C++单元测试框架,由Google公司发布,为在不同平台上编写C++测试而开发。它提供了丰富的断言、致命与非致命判断、参数化、“死亡测试”等等。例如:
测试用例本身就是一个exe项目,编译后可以直接运行,非常方便。
写测试用例变得很简单(用一些简单的宏比如TEST),那我们就多花点精力在测试用例设计上吧。
为检查各种检查点提供了强大而丰富的断言宏。
改进了丰富的命令行参数,并对脚本运行进行了一系列设置。
开源地址:https://github.com/google/googletest
4)pytest
Py是一个非常成熟、功能齐全的单元自动化测试框架,支持Python语言。简单易用,支持参数化;它可以支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试,以及接口自动化测试(pytest集成请求)。
官方网站地址:http://pytest.org/
5)单元测试
Unittest是Python自带的单元测试框架。它不需要安装,易于使用。您可以通过引入包导入单元测试来使用它。作为python的标准库,unittest单元测试框架是其他单元测试框架的基础。
官方网站地址:http://docs.python.org/zh-cn/3/library/unittest.html
测试单元模拟工具
在单元测试时,要测试的类有很多依赖,这些依赖的类或者资源会有依赖,导致单元测试代码中无法完成构造。因此,我们需要使用Mock技术来隔离依赖对象,即模拟这些需要构建的类或资源,并提供给需要测试的对象。
6)JMockit
JMockit是一个用于Java语言单元测试的开源模拟工具,它包括一组工具和API。Jmockit可以与junit和TestNG一起使用来编写单元测试。
JMockit支持类级整体模拟和部分方法重写,以及实例级整体模拟和部分模拟,可以模拟静态方法、私有变量和局部方法。
该工具还具有统计单元测试代码覆盖率的功能,提供了线覆盖率、路径覆盖率、数据覆盖率三种类型的代码覆盖率。
官方网站地址:http://jmockit.org/
单元覆盖工具
单元测试中也需要代码覆盖工具。代码覆盖率是一个用来衡量单元测试中代码覆盖率的指标。代码覆盖率统计工具用于查找测试未覆盖的代码,提高单元测试的覆盖率。此外,这类工具还可以用来建立代码调用关系,准确确定回归测试的范围,避免完全回归造成的测试资源浪费。
7)JCoCo
Jacoco是开源的免费Java代码覆盖工具,由EclEmma创建,用法灵活,可以嵌入Ant和Maven中。作为一个Eclipse插件,你可以使用它的Java代理技术来监控Java程序等等。许多第三方工具提供了与JaCoCo的集成,如sonar、Jenkins等。
JaCoCo包括各种规模的覆盖率计数器:
C 0覆盖率说明(c0覆盖率)
分支机构(C1覆盖范围)
圈复杂度(圈复杂度)
行覆盖(行)
方法覆盖(非-抽象方法)
类别(类)
官方网站地址:https://www.jacoco.org/jacoco/
8)gcov、lcov、gcovr
Gcov、lcov和gcovr都是支持C/C++语言代码覆盖的工具。
Gcov是gcc内置的代码覆盖率生成工具,可以很容易地与gcc编译器一起使用。通常直接安装GCC工具链,其中也包括gcov命令行工具。gcov得到的结果是文本形式的,不同的源文件需要逐个执行gcov命令,对于大型项目不方便,这时就需要lcov了。
Lcov是gcov工具的图形前端,收集多个源文件的gcov数据,生成描述覆盖率的HTML页面。生成的结果将包括一个概览页面,以便于浏览。
一般情况下,使用gcov和lcov可以满足代码覆盖率的获取和显示。lcov和genhtml生成的HTML报表详细、简洁、直观,既有行覆盖,又有分支覆盖。而HTML文件在常见的持续集成工具(如Jenkins和gitlab-ci)中是无法集成的,所以我们需要其他工具来进行持续集成和覆盖结果的展示。Gcovr是一个针对C/C++代码覆盖,支持多种方式展示(包括列表、XML文件、HTML网页等)的工具。),而XML文件只能由持续集成工具解析。
Lcov下载地址:https://github.com/linux-test-project/lcov
Gcovr下载地址:https://github.com/gcovr/gcovr
9)Coverage.py
Coverage.py是一个衡量Python语言代码覆盖率的工具。Coverage.py可以指定通过配置文件来分析哪些源文件。通过分析源代码,可以找到测试没有覆盖到的代码。
官网地址:https://coverage . readthedocs . io
基于的智能单元测试用例自动生成工具
单元测试的重要性毋庸置疑,但是很多企业并没有很好的执行。其中一个最重要的原因是开发人员不愿意花时间写单元测试代码。现在有两个可以自动生成单元测试用例的智能工具推荐,可以帮助提高单元测试的覆盖率,提高企业的R&D效率。
10)EvoSuite
EvoSuite是由英国谢菲尔德等大学联合开发的开源工具,用于自动生成测试用例集。生成的测试用例都符合Junit标准,可以直接在Junit中运行,并得到Google和Yourkit的支持。使用这种自动化测试工具,可以在保证代码覆盖率的前提下,大大提高测试人员的开发效率。但只能辅助测试,不能完全代替人工。测试用例是否正确仍然需要人工判断。
官方网站地址:https://www.evosuite.org/
开源代码地址:https://github.com/EvoSuite/evosuite
11)不同的蓝色封面
Diffblue Cover是一个自动化的单元测试编写工具。通过分析Java应用程序来编写反映当前行为的单元测试,可以提高测试覆盖率,帮助开发人员在未来的代码更改中发现回归缺陷。
开源插件社区版地址:https://plugins . jets . com/plugin/14946-diff blue -cover --community -edition/versions
评论前必须登录!
注册