升压单元测试开始但不执行

问题描述

我写了一些简单的提升测试。 测试编译,但启动它不会执行测试体。 下面是一个测试示例。

// 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?

因此您可能应该更改测试套件的名称。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...