Coco 测试引擎目标
概览
Coco 测试引擎的 目标程序 由 Coco 测试引擎驱动程序 驱动,并将其连接到被测试的功能。该程序是一个由用户编写和编译的独立的数据驱动单元测试,它使用来自 Coco 测试引擎框架的头文件和宏。
对于每个数据驱动的测试,用户会编写一个接口定义,通过 COCOTEST 宏引入。接口包括一个用于读取测试数据的宏(《COCOTEST_FETCH》),另一个用于保存和验证测试结果的宏(《COCOTEST_CHECK》))。在读取和验证之间调用被测试的功能。
目标程序的主要用途是运行 cocotestengine
驱动程序,但有一个用例更好使用目标程序直接:当需要调试特定测试用例时。可以在调试器中运行如下命令
<targetprog> -t <test> -d <configDir> --row <row>
其中 <targetprog> 是编译后的目标程序,<test> 是测试名称,<row> 是需要执行的行为。失败测试的行号由 cocotestdriver
如下报告
Row 5: In: expression="11" Out: result="Ans = 11" (should be "Ans = 1") Rows run: 78. Passed: 77, Failed: 1.
编写目标程序
本节假设您要测试的代码包含在一个或多个库中。因此,目标程序是一个使用此库的单独的 C++ 源文件。
源代码
源代码必须以一条包含语句开始
#include "CocoTestEngine.h"
这使以下宏可访问
COCOTEST
COCOTEST( <testname> )
:声明一个测试接口。这个宏用于以下形式
COCOTEST( test ) { <fetch statements> <function calls> <check statements> }
其中以下代码块(称为 COCOTEST 块)是一个 void
函数,它包含对 COCOTEST_FETCH
和 COCOTEST_CHECK
的调用,其中包含任意代码。
该宏定义了一个名为 <testname> 的测试。这是与目标程序和 cocotestengine
的 -t
标志一起使用的名称,用于指定一个测试。它也是用于存储配置选项和测试数据的 JSON 文件 的基本名称。
COCOTEST_FETCH
COCOTEST_FETCH( <type>, <identifier> )
:声明一个变量并获取其内容。
该宏使用名称 <identifier> 声明一个给定类型的变量,并将一个值赋给它。在测试和学习模式下,该值从数据文件中名为 "<identifier>" 的行中的 input
字段中获取。在发现模式下,它由 cocotestengine
生成。
所有 COCOTEST_FETCH
语句都必须位于 COCOTEST
块的开头。
COCOTEST_CHECK
COCOTEST_CHECK( <identifier> )
:保存或验证一个变量。
<identifier> 必须是已经声明的变量的名称。
在测试模式下,变量的值与数据文件中当前行的 output
字段 "<identifier>" 的值进行比较。如果它们不同,则该行的测试失败,并且程序继续检索和测试下一行。
在学习模式下,<identifier> 的当前值将覆盖数据文件中的值。
在发现模式下,生成一个新的行,其中输出值 "<identifier>" 是变量的当前值。在发现过程结束时,将新行写入数据文件(除非它被更好的一个所替代)。
所有 COCOTEST_CHECK
语句都必须位于 COCOTEST
块的末尾。
COCOTEST_MAIN
COCOTEST_MAIN
:此宏必须出现在每个目标源文件的末尾。它为目标程序定义了一个适当的 main()
函数。
注意:有关 COCOTEST_FETCH
和 COCOTEST_CHECK
可以使用的类型列表,请参见此处。
编译
对于目标程序的编译,只需向编译器添加一个包含路径,以便找到 CocoTestEngine.h
文件,并启用代码覆盖率 - 所需的所有位于头文件中的代码。
- 在 Linux 默认安装下,包含
CocoTestEngine.h
的目录是/opt/SquishCoco/include
。 - 在 Windows 上,它位于
%SQUISHCOCO%\CocoTestEngine
,其中%SQUISHCOCO%
是安装程序自动设置的指向 Coco 安装目录的路径环境变量。
因此,必须扩展编译器的包含路径,以便搜索这些目录。
对于发现,必须使用代码覆盖率编译目标 和 包含要测试的函数的库。与普通代码覆盖率不同,需要额外的选项。在简单的情况下,选项可能包括
--cs-on --cs-test-case-generation --cs-exclude-file-wildcard=* --cs-include-file-wildcard=*/librarydir/*
要启用测试数据和代码覆盖率生成的以下参数是必需的
--cs-on
以启用代码覆盖率。--cs-test-case-generation
以支持测试用例生成。
以下参数被建议以提高遗传算法的精度
--cs-mcdc
或--cs-mcc
(可选)用于更多由搜索算法使用的仪器点。--cs-exclude-file-wildcard=* --cs-include-file-wildcard=*
/librarydir/*
以仅生成库代码的代码覆盖率。然后搜索算法可以更清楚地看到哪些更改导致了更多的代码覆盖率。使用库代码所在目录的名称而不是
librarydir
。如果需要,请使用多个--cs-include-file-wildcard
标志。
请注意,即使目标是未启用代码覆盖率编译的,运行测试和执行学习仍然可能;只是不进行发现。
命令行参数
以下是一些从用户角度需要的命令行参数列表。还有更多选项,但它们是 cocotestengine
和目标程序之间通信需要的,并且可能没有通知就改变。
-h
|--help
:打印帮助信息并退出。-d
<path> |--data-dir
=<path>:设置包含数据和配置文件的目录的路径。默认值是驱动程序的当前工作目录。
-t
<string>:设置要执行的测试的名称。-r
<int> |--row
=<int>:设置要执行的行号。如果没有设置此参数,则将执行所有测试。
--learn
:启用学习模式。必须设置选项
-t
。然后目标程序将运行此测试的所有行,并将每行的测试输出值存储在数据文件中。-l
|--list
:打印由目标程序支持的测试列表。
Coco v7.2.0©2024 The Qt Company Ltd.
Qt 及其相关标志是芬兰和/或全球其他国家的 The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。