【问题标题】:Does cppUnit use fork() when it launch each unit test?cppUnit 在启动每个单元测试时是否使用 fork()?
【发布时间】: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


【解决方案1】:

Cppunit 不使用 fork 来分隔测试。但是,同一套件中的测试是独立的对象,因此每个测试都有自己的一组变量,因此彼此独立,不会相互影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    相关资源
    最近更新 更多