CxxTest使用指南(入门篇)
准备工作:
1、 安装perl/Python
2、 下载解压CxxTest
3、 设置环境变量:
如果使用Perl,则设置一个名为PERL的环境变量,值为perl.exe的位置。(比如D:\Perl\Bin\Perl.exe);
如果安装Python,则设置一个名为PYTHON的环境变量,值为你安装的Python目录下的python.exe路径(比如D:\Python25\python.exe);
设置一个名为CXXTESTDIR 的环境变量,值为CxxTest解压后的目录。(比如D:\Cxxtest)。(设置CXXTESTDIR的原因:免去每次在makefile文件中指定CXXTESTDIR的目录)
方式一:使用CxxTest \sample\msvc中的框架
1、 拷贝msvc文件夹到工程目录中
打开CxxTest_Workspace.sln,可以看到三个项目:
- CxxTest_3_Generate 运行 cxxtestgen.pl 生成 runner.cpp 文件;
- CxxTest_2_Build 编译生成的runner.cpp文件;
- CxxTest_1_Run 运行测试;
2、 修改其中的makefile文件:
1)将以下内容:
# Where to look for the tests
TESTS = ..\gui\*.h ..\*.h
修改为:
# Where to look for the tests
TESTS = *.h
这段话的作用是查找测试文件,我们的测试文件是.h格式的,放在当前目录下。(如果是.hpp格式的话,自然改成*.hpp;放在其它目录的话,还要修改路径)
2)将以下内容删除:
# Where the CxxTest distribution is unpacked
CXXTESTDIR = ..\..
因为先前已经定义了CXXTESTDIR的环境变量,这里的定义可以省掉。
3、 在CxxTest_3_Generate项目中添加测试文件
这是测试文件的一个简单的例子:
// Sampletest.h
#include <cxxtest/TestSuite.h>
//定义一个测试套件类,将测试用例放入其中
class SampletestSuite : public CxxTest::TestSuite
{
public:
//定义测试,以test作为测试函数前缀,
//这是cxxtestgen.pl或cxxtestgen.py对测试文件进行扫描,抽取测试用例的依据
void testMultiplication( void )
{
TS_ASSERT_EQUALS( 2 * 2, 5 );
}
};
4、 运行测试,即生成CxxTest_1_Run,可在输出窗口看到测试结果,并双击结果行可定位到源代码。
方法二:简化msvc,将Generate,Build,Run集成到一个项目中
1、 在工程中添加新项目:Unit_Test
将修改后的makefile文件拷贝到Unit_Test目录中。
2、 在Unit_Test项目源文件中添加新建项dummy
无论添加进来的是.cpp,还是.h,将后缀名去掉。
右击dummy,选择属性,在弹出的属性页中,“自定义生成步骤”选项->“命令行”选项,输入:
ECHO Don't Delete this file!!! > Dummy
ECHO -
ECHO -
ECHO -------------------- Generating test cases --------------------
if exist runner.cpp del runner.cpp /Q
NMAKE runner.cpp /nologo
ECHO -
ECHO –
在“输出”选项中输入:
Runner.cpp
Dummy只是一个文件,里边可以是任何内容,关键点在于对Dummy文件进行编译的时候所执行的操作,这是一个批处理文件,这个批处理文件执行生成 testcase 的操作,也就是调用Python/Perl生成测试用例(也就是runner.cpp文件)。为了保持每次编译都可以生成新的runner文件,就必须保证
1)Dummy文件在runner.cpp之前进行编译;
2)Dummy文件每次都必须被重新编译。
第一点是通过文件顺序来的,第二点是在生成事件里边重新生成Dummy文件来保证的(VS2005似乎没问题,VC6似乎还是有些问题的)。
从另外一个角度讲,这个Dummy文件相当于 samples/msvc 第一和第二个项目的功能。(即Generate和Build)
3、 编译dummy文件,生成runner.cpp,将其添加到Unit_Test“源文件”中。
确定当前目录中已有.h测试文件,否则可能提示错误。
4、 右击Unit_Test,选择属性,在弹出来的属性页中, “生成事件”选项->“生成后事件”选项->“命令行”选项中输入:
ECHO -
ECHO -
ECHO -------------------- Running Unit Test Cases --------------------
$(OutDir)\$(TargetName).exe
ECHO -
ECHO -
ECHO -------------------------------------------------------------------------------
DEL runner.cpp
放在项目“生成后事件”中的这一段命令,运行生成的测试,相当于samples/msvc 第三个项目的功能。(即Run)
5、 在Unit_Test“头文件”中,添加新的.h测试文件。
生成Unit_Test,即可在输出窗口分割线下看到运行测试的结果,双击结果行可以定位到源代码。
如:
1>-------------------- Running Unit Test Cases --------------------
1>Running 1 test
1>In MathsTestSuite::testMultiplication:
1>f:\test\cxxunittest\cxxunittest\sampletest.h(9): Error: Expected (2 * 2 == 5), found (4 != 5)
1>Failed 1 of 1 test
1>Success rate: 0%
1>----------------------------------------------------------------------------------
方法三:抽取出一个Unit_Test文件夹
所谓方法三,不过是将方法二中的Unit_Test文件夹,替代方法一中的msvc文件夹,移动到其它的项目中使用而已。
不像方法一的msvc那样需要三个项目,也不需像方法二那样,每次都修改dummy,和项目属性,添加命令行。将Unit_Test文件夹各个属性都配置好之后,独立出来随时备用。
准备工作,如前所言。
要进行测试时:
将Unit_test文件夹拷贝放到工程目录中,在工程中添加里面的Unit_Test项目,仿照Sampletest.h写自己的测试文件。
运行测试时:
先编译dummy,再生成该测试项目。(如果没有另外添加*.h文件,直接生成就可以了)