如何解决升压单元测试开始但不执行
我写了一些简单的提升测试。 测试编译,但启动它不会执行测试体。 下面是一个测试示例。
// Windows uses Boost static libraries
#ifndef _WIN32
#define BOOST_TEST_DYN_LINK
#endif
#define BOOST_TEST_MODULE "SimpleTest"
#include <boost/test/unit_test.hpp>
#include "radarInterface/ObjConfiguration.h"
#include "radarInterface/ObjIF.h"
#include "CommonFunctions.h"
#ifndef BOOST_TEST
#define BOOST_TEST(A)
#endif
BOOST_AUTO_TEST_SUITE(_obj_interface_)
BOOST_AUTO_TEST_CASE(init_string)
{
BOOST_TEST_MESSAGE("init_string");
ObjConfiguration conf;
conf.mcastAddress("225.0.0.40");
conf.mcastPort(6310);
conf.ipAddress("127.0.0.1");
conf.tcpPort(6312);
BOOST_TEST(conf.isComplete() == true);
ObjIF objIf;
BOOST_CHECK_NO_THROW(objIf.init(conf));
usleep(3000000);
ri.fini();
}
BOOST_AUTO_TEST_SUITE_END()
尝试运行它看起来一切正常,但实际上测试主体并未运行。 我使用 CMake 来编译和运行测试。 以下是编译后使用 CMake (ctest) 运行测试的结果。
Test project C:/Users/kongrosian/SimpleTest/build
Start 1: ObjInterface_test
1/1 Test #1: ObjInterface_test .............. Passed 0.03 sec
100% tests passed,0 tests Failed out of 1
Total Test time (real) = 0.05 sec
即使从命令行运行它似乎也不起作用。使用命令
".\ObjInterface_test.exe --log_level=message --run_test=init_string"
我希望至少看到 "init string"
消息。相反,我只是得到
Process PID: xxxx
如果我在我的项目中使用sehe在评论中编写的测试代码,结果是一样的。 执行命令时
./sotest --log_level=message --run_test=_obj_interface_/init_string
或
./sotest --list_content
我得到 Process PID: xxxx
作为命令行输出。
您对这种行为的原因有什么想法吗? 我使用的 boost 版本是 1.72。
我希望我已经澄清得更好。
解决方法
目前尚不清楚您如何得出测试未运行的结论。它似乎明确声明它正在运行测试(并通过)。
但是,消耗的时间与您的预期不符,这会导致您猜测您可能运行了错误的目标(旧版本,例如不是最新的构建配置之一)。
>命令行
给定测试套件名称,命令行参数应如下所示:
./sotest --log_level=message --run_test=_obj_interface_/init_string
哪个适合我打印:
Running 1 test case...
init_string
*** No errors detected
如果需要,您可以使用一些通配符:
./sotest -l all -t "*/init_string" Running 1 test case... Entering test module "SimpleTest" /home/sehe/Projects/stackoverflow/test.cpp(20): Entering test suite "_obj_interface_" /home/sehe/Projects/stackoverflow/test.cpp(22): Entering test case "init_string" init_string /home/sehe/Projects/stackoverflow/test.cpp(45): info: check conf.isComplete() == true has passed /home/sehe/Projects/stackoverflow/test.cpp(53): info: check 'no exceptions thrown by objIf.init(conf)' has passed /home/sehe/Projects/stackoverflow/test.cpp(22): Leaving test case "init_string"; testing time: 3000212us /home/sehe/Projects/stackoverflow/test.cpp(20): Leaving test suite "_obj_interface_"; testing time: 3000270us Leaving test module "SimpleTest"; testing time: 3000294us *** No errors detected
使用 --list_content
来...列出内容:
sehe ~ Projects stackoverflow ./sotest --list_content _obj_interface_* init_string*
关于命名的警告
以下划线开头(或包含双 __ 下划线)的名称是保留的。使用它们会使您的程序格式不正确,您可能会遇到问题。见What are the rules about using an underscore in a C++ identifier?
因此您可能应该更改测试套件的名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。