【发布时间】:2010-11-04 05:03:33
【问题描述】:
我正在使用 CppUnit 设置一堆单元测试,但遇到的问题是没有一个测试正在运行。该项目分为几个小库,我计划以相同的方式划分单元测试类,然后将它们全部链接到一个单独的测试程序中。问题是,然后测试类在他们自己的库中,除非我明确调用它们,否则它们不会链接到主测试程序中,即我必须放入
runner.addTest( TestClass::suite() );
单独针对每个测试类,不能使用 TestFactoryRegistry 的 makeTests() 方法来获取测试列表。如果我只是在顶层目录中将它们全部编译在一起,makeTests() 方法可以正常工作,但如果我能提供帮助,我不想将所有测试类放在一个位置。
CppUnit 文档给出了以下小提示
使用 Helper 时的链接问题 宏?
当你创建一个项目并编写 它的单元测试套件,工作已经完成 通过使用更容易 所谓的辅助宏: CPPUNIT_TEST_SUITE_NAMED_REGISTRATION, CPPUNIT_REGISTRY_ADD 和 CPPUNIT_REGISTRY_ADD_TO_DEFAULT。这 问题是如果你使用那些 源代码文件中的宏 TestFixture 类(比如 MyTest 作为 示例),如果您使用类似的行 这个
runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest());
在文件中的 main() 函数中 main.cpp,不会有试运行 完全没有!
原因很简单,链接 阶段,构建的步骤之一 过程中,不要插入对象 最终文件(.obj 或 .o 文件) 如果没有未定义则可执行 main.cpp 中的符号。
这样,目标代码 包含 AutoRegister 静态 变量实例化不属于 最终的可执行文件并且无法 将自己插入跑步者中 main() 函数。
你必须创建一个未定义的符号 在 main.cpp 中使 mytest.o 文件 与 main.o 集成到 最终可执行文件。
米歇尔·诺拉德的诡计
但没有说明如何进行这项工作,而且我只是太密集了,无法自己弄清楚或在网上找到示例。
现在我可以为每个库进行单独的可执行测试,最后我可能会这样做,但我想先尝试让它工作,所以我只运行一个测试程序来测试整个事物。有关如何使其发挥作用的任何想法/示例?
【问题讨论】:
标签: c++ linux unit-testing cppunit