【发布时间】:2016-02-29 09:05:49
【问题描述】:
我有一个要执行测试的代码库。此代码库的其中一个文件包含我要测试的代码,以及程序的主要功能。
当我将此文件添加到我的 CMakeLists 时,它抱怨包含多个主要功能。
事情是这样的:
RunTest.cpp:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE Main
#include <boost/test/unit_test.hpp>
MyTest1.cpp:
#define BOOST_TEST_MODULE test_1_module
#define BOOST_TEST_DYNAMIC_LINK
#include <boost/test/unit_test.hpp>
#include <boost/test/parameterized_test.hpp>
#include <boost/test/unit_test_log.hpp>
#include <boost/test/results_collector.hpp>
#include "../MyCode.h"
BOOST_AUTO_TEST_SUITE(test_suite_one)
BOOST_AUTO_TEST_CASE {
...
}
BOOST_AUTO_TEST_SUITE_END()
这是我的 CMakeLists 的样子:
SET (
TestRunner
RunTest.cpp
MyCode.cpp #contains a main function
)
ADD_EXECUTABLE(TestRunner $TestRunner)
我该如何解决这个问题?有没有办法让 boost 忽略我的代码库中的主要功能?
【问题讨论】:
-
你在头文件中定义了
main?! -
不,它在一个 cpp 文件中。
-
好吧,无论如何...只要正确地分离你的代码,这样带有
main的*.cpp就不会包含太多其他内容。 -
好的,问题是这是共享代码,所以不容易做到。您还有其他解决方案吗?
-
如果您无法修改包含
main的文件,那么如果您的测试检测到其中有错误,您会怎么做?我认为要么放弃而不是对这段不可测试的代码进行单元测试,要么投入精力修改不可测试的代码以使其可测试,这两者都证明比试图找到解决问题的方法更有效率。
标签: c++ unit-testing boost