【发布时间】:2013-04-16 16:11:25
【问题描述】:
我正在使用 cppunit 对我的项目进行单元测试。
我想知道 cppunit 是否在新的 fork() 系统调用中启动每个单元测试,因为:
- 使用 fork 将允许创建一个新的地址空间来运行每个单元测试
- 使用 fork 可以让单元测试保持运行,即使其中一个导致崩溃。
我定义了一个全局变量,然后我尝试在单元测试中更改全局变量,并且更改对父进程没有影响,但不幸的是我发现全局变量已更改。
所以默认情况下 cppunit 不支持使用 fork() 启动单元测试。我想知道 cppunit 中是否有可以使用fork() 启动单元测试的宏?
我的测试是这样定义的:
class MYTest : public CppUnit::TestCase {
CPPUNIT_TEST_SUITE( MYTest );
CPPUNIT_TEST( getRetryValueTest );
CPPUNIT_TEST( getRetryValueTest2 );
CPPUNIT_TEST_SUITE_END();
public:
virtual void setUp();
void getRetryValueTest();
void getRetryValueTest2();
};
【问题讨论】:
-
通常这仅适用于“死亡测试”,其中预期测试将导致应用程序在发生错误时终止(考虑级联异常)。由于我对 cppUnit 不熟悉,因此无法在这里给出明确的答案。
-
似乎很容易自己检查。编写两个测试,并分别打印当前进程 ID。它们是否都打印相同的值?
-
这将是确保一个测试不会影响另一个测试的好方法,但有时您希望测试相互影响[不必将状态保存在文件中,或类似的东西]。我认为将它作为一个选项是理想的——尽管我不知道 cppunit 是如何工作的。
-
@RobKennedy,你说得对,这是一个 claver 的想法,但是 cppunit 可以同时支持这两者,并且可以有宏来使用 fork 启动单元测试。如果他们存在,我会知道他们
-
如果测试相互影响,那么它们不是正确的单元测试......
标签: c++ c unit-testing cppunit