CppUnit утечка

Выполнение моих регрессионных тестов с Valgrind У меня есть такой отчет:

== 20341 == 256 байтов в 1 блоках косвенно теряются в записи потерь 915 из 919                                                                                                         
==20341==    at 0x4A0661C: оператор новый (длинный без знака) (vg_replace_malloc.c:220)                                                                                                      
==20341== по 0x7F366FA: std:: vector>:: _ M_insert_aux (__ gnu_cxx:: __ normal_iterator>>, CppUnit:: Test * const &) (new_allocator.h: 88)                                                                                                            
== 20341 == по 0x7F36496: CppUnit::TestSuite::addTest(CppUnit::Test*) (stl_vector.h:610)                                                                                             
==20341== по 0x585B80: TestVectorAlgebra::addTestsToSuite(CppUnit::TestSuiteBuilderContextBase&) (testvectoralgebra.h:30)                                                          
==20341== по 0x586719: TestVectorAlgebra::suite() (testvectoralgebra.h:42)                                                                                                         
==20341== по 0x5948C4: CppUnit:: TestSuiteFactory:: makeTest () (TestSuiteFactory.h: 20)                                                                            
== 20341 == по 0x7F2C6B0: CppUnit::TestFactoryRegistry::addTestToSuite(CppUnit::TestSuite*) (TestFactoryRegistry.cpp:149)                                                            
==20341== по 0x7F2CAD5: CppUnit::TestFactoryRegistry::makeTest() (TestFactoryRegistry.cpp:136)                                                                                     
==20341== по 0x580760: основной (testunit.cpp:88)

Я полагаю, это связано с тем, что тесты, добавленные в Suite, не удаляются до окончания основного.

Вот как я регистрирую тест:

  CppUnit::TextTestRunner::TestRunner runner;

  // Get the top level suite from the registry
  CppUnit::Test* myTest = 
    CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest();

  runner.addTest( myTest->findTest("TestVectorAlgebra") );

Как мне отменить регистрацию этих тестов?

1 ответ

Документация CppUnit предполагает, что runner.addTest берет на себя ответственность за любой тест, который он дал. Давая runner.addTest только часть вашего экземпляра myTest, вы не предоставляете способ очистки всего экземпляра myTest при удалении. Вручную deleteИспользование myTest после запуска, вероятно, не будет работать, так как runner также попытается удалить часть myTest что это было дано.

Если вас интересует только выполнение определенного теста или подмножества тестов, вместо этого вы должны попробовать использовать testName параметр TextRunner:: run.

(И если у вас есть время и желание, вы можете захотеть взглянуть на другую платформу модульного тестирования. UnitTest ++ и Google Test новее, проще в использовании и более функциональны, чем CppUnit.)

Другие вопросы по тегам