2013-04-16 2 views
3

Я использую cppunit для модульных тестов моего проекта.Использует ли cppUnit fork() при запуске каждого модульного теста?

И я интересно, если CppUnit запуск каждого модульного тестирования в системном вызове новая вилка(), потому что:

  • Используя вилку позволит создать новое адресное пространство, в котором для выполнения каждого теста блок
  • Использование 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(); 
}; 
+0

Обычно это делается только для «тестов смерти», когда ожидание является тестом, что приведет к прекращению приложения при возникновении ошибки (подумайте о каскадных исключениях). Не могу дать окончательного ответа здесь, так как я не знаком с cppUnit. –

+4

Кажется, было бы легко проверить себя. Напишите два теста и распечатайте каждый текущий идентификатор процесса. Они оба печатают одни и те же значения? –

+0

Это было бы хорошим способом гарантировать, что один тест не влияет на другой, но иногда вы ХОТИТЕ тесты влиять друг на друга [без сохранения состояния в файле или некоторых таких]. Я бы подумал, что это идеальный вариант - хотя я не знаю, как работает cppunit. –

ответ

3

CppUnit не использует вилку, чтобы отделить тесты. Однако тесты в одном и том же пакете являются отдельными объектами, поэтому каждый тест имеет свой собственный набор переменных и поэтому независим друг от друга и не может влиять друг на друга.

Смежные вопросы