问题描述
我是一个c++新手程序员,之前大多数时候在用javascript,现在由于作业需要,我在用c++写一个project,开发环境是Xcode,我想自己做测试,但是对测试相关之前一无所知,看了这个决定用catch这个测试框架。
之前在写c++小作业的时候,要么是直接在main函数中cout<<等到提交之前再删掉,或者就新建一个cpp文件,添加上main函数,然后再把项目中的main函数临时改名(一般我是把main函数名改成main00之类的),点击XCode的运行临时测试一下,主要是出于对某一个地方的不确定性进行测试,等测试完了再改回来。
但我觉得以上所列的方式实在是蠢,让各位前辈见笑了。
现在我的项目目录是这样的(这是一个用c++实现minisql的作业):
目前各个文件其实都是没有什么内容的,每一个文件夹代表一个模块,各个模块关系如下:
我打算写一个部分测一个部分(比如先写BufferManager),测试没有问题了继续写下一个部分。
所以我现在关于测试文件的组织有如下几个疑问:
我是应该把测试文件放在对应的模块文件目录下呢?还是单独有一个测试文件?
各个模块是不是应该单独一个测试文件?
另外我发现我写两个测试文件的话,就算我注释掉#define CATCH_CONFIG_MAIN这个还是无法正常运行,除非把别的测试文件都注释掉。
另外等我写好了入口文件(NewSQL.cpp中有一个main函数),那该怎么运行这些测试文件?难道还是不断的注释和取消注释....
感觉自己问的问题有点太笨了,但我的确非常想知道正确的测试写法和使用是如何的,网上没有找到非常有针对性的答案,特来询问,谢谢~
(如果您觉得哪里做得不好,请指出来我会认真改正,但是请不要人身攻击,如果您的答案非常有参考价值,我也会私信您询问是否需要一定的红包报酬,学生党,聊表心意)
附catch传送门: https://github.com/philsquare...
问题解答
回答1:我是应该把测试文件放在对应的模块文件目录下呢?还是单独有一个测试文件?
各个模块是不是应该单独一个测试文件?
另外我发现我写两个测试文件的话,就算我注释掉#defineCATCH_CONFIG_MAIN这个还是无法正常运行,除非把别的测试文件都注释掉。
另外等我写好了入口文件(NewSQL.cpp中有一个main函数),那该怎么运行这些测试文件?难道还是不断的注释和取消注释....
测试代码和生产代码分开,命名上相关比如类A的测试类,叫AUnitTest 或者ATest 或者AUT
各个模块测试文件分开
测试文件有自己的入口文件
关键在项目配置,测试项目以来生产代码,生产代码不以来测试代码。两个应该是可以生产两个可执行程序。按照这样的目标配置项目