将Doctest与代码一起使用时,将实现放在何处

欧米茄棒

在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将Python模块请求与Sitescout API一起使用时的响应状态代码400

将OAuth与Reddit一起使用时获取401错误代码

将验证过滤器与async / await一起使用时,如何处理空的HttpContext.Current?

将表别名与SqlExpressionSelectFilter一起使用时丢失

将argv与函数一起使用时出错

将RxJava与Room一起使用时循环播放

将statsmodels与pyinstaller一起使用时出错

将sklearn的BaggingClassifier与GridSearchCV一起使用时的ZeroDivisionError

将Objectify与GAE一起使用时,ObjectifyService的NoClassDefFoundError

将Laravel Forge与Bitbucket一起使用时的问题

将fnAddData与数据顺序一起使用时出错

将Bean验证与焊接一起使用时的ClassCastException

将 ScrollChor 与 NavItem 一起使用时出错

将FutureBuilder与本地JSON一起使用时出错

将AutoMapper与异步方法一起使用时出错

将ngMaterial与ngRoute一起使用时出错

将Express会话与Express一起使用时出错

将Chromium与Fedora一起使用时的安全警告

将 .next() 与 takeUntil 一起使用时的参数

将SharedElementTransition与recyclerView一起使用时出错

将SparkJob与NamedRddSupport一起使用时出错

将fabricjs与nodejs一起使用时的Gebbrich字母

将 scanf() 与“%c”一起使用时的前导空格

将pynput与pyinstaller一起使用时出现错误

将RabbitMQ与Logstash一起使用时丢失消息

将cout与指针值一起使用时出错

将 File 与 ImagePicker Flutter 一起使用时出错

将 div 放在一起

将useState与[]和不与之一起使用,以及与{}一起使用时的区别