我在C ++项目中使用doctest进行测试。
我想将测试代码放在实现的旁边,正如该库所说的那样,但是我似乎无法弄清楚该doctest实现代码的用途。
我有一个doctest.cpp
看起来像这样的文件:
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h"
一个main.cpp
看起来像这样的:
#include "thing.h"
int main(int argc, const char *argv[]) {
do_thing();
}
thing.h
是不言自明的,但thing.cpp
看起来像这样:
do_thing() {}
TEST_CASE("Test thing") {
CHECK(1 == 1);
}
CMake用于创建两个可执行文件,一个Tests
可执行文件和一个Main
可执行文件。
如果我没有doctest.cpp
在项目资源中包含Main
,则会出现未定义的参考错误,因为它无法在doctest中找到所有测试内容的定义。
但是,如果包含它,则会出错,因为main()
一个目标中有多个功能。
我在doctest文档中找不到与此有关的任何信息。
您打算如何解决这个问题?
图书馆的作者在这个问题上给予了很好的回应:
DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN实现了测试运行器,并且还定义了main()函数。
DOCTEST_CONFIG_IMPLEMENT仅实现测试运行器。
如果定义自己的main(),则应该使用DOCTEST_CONFIG_IMPLEMENT-查看相关文档。
您将需要在主可执行文件(即doctest.cpp)中实现测试运行程序,因为您将在生产代码旁边编写测试。
您还可以在构建主可执行文件时定义DOCTEST_CONFIG_DISABLE,以便将测试写入生产代码中,但不进行编译(您仍然需要doctest.cpp,以便所有链接)。这样,您将不需要#ifdef测试。
您也可以完全删除测试可执行文件,并使用主可执行文件运行测试文档。
我选择编写自己的main()
函数的第一个选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句