Вы автоматизируете выполнение своих модульных тестов на основе cppunit во время процесса сборки, верно?
Если бы вы пытались использовать CppUnit для выполнения процесса сборки, я бы хотел сказать, что не делайте этого!
Не могли бы вы рассказать нам, что останавливает процесс сборки при сбое модульных тестов? И какие у вас начались юнит-тесты: Makefile, собственный скрипт или инфраструктура непрерывной интеграции ?
Чтобы попытаться ответить на ваш вопрос, CppUnit не может восстановиться после ошибок нарушения или сегментации. В Unix-подобных системах вы должны быть в состоянии перехватить SIGSEGV и продолжить, , но , в каком состоянии ?
Если ваши сбои происходят в вашем модульном тесте, а не в вашем продукте, то я бы порекомендовал вам использовать защиту утверждений для предотвращения разыменования указателей NULL:
class TestObject : public CPPUNIT_NS::TestCase
{
CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testObjectIsReady);
CPPUNIT_TEST_SUITE_END();
public:
void setUp(void) {}
void tearDown(void) {}
protected:
void testObjectIsReady(void)
{
Object *theObject = GetObject();
CPPUNIT_ASSERT_MESSAGE("check pointer is not null", theObject != NULL);
//--- now you can play with your object without dereferencing a NULL pointer
CPPUNIT_ASSERT_MESSAGE("check objet is ready", theObject->isReady());
}
};