CppUnit утечка - PullRequest
       16

CppUnit утечка

4 голосов
/ 29 октября 2009

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

==20341== 256 bytes in 1 blocks are indirectly lost in loss record 915 of 919                                                                                                         
==20341==    at 0x4A0661C: operator new(unsigned long) (vg_replace_malloc.c:220)                                                                                                      
==20341==    by 0x7F366FA: std::vector<CppUnit::Test*, std::allocator<CppUnit::Test*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<CppUnit::Test**, std::vector<CppUnit::Test*, std::allocator<CppUnit::Test*> > >, CppUnit::Test* const&) (new_allocator.h:88)                                                                                                            
==20341==    by 0x7F36496: CppUnit::TestSuite::addTest(CppUnit::Test*) (stl_vector.h:610)                                                                                             
==20341==    by 0x585B80: TestVectorAlgebra::addTestsToSuite(CppUnit::TestSuiteBuilderContextBase&) (testvectoralgebra.h:30)                                                          
==20341==    by 0x586719: TestVectorAlgebra::suite() (testvectoralgebra.h:42)                                                                                                         
==20341==    by 0x5948C4: CppUnit::TestSuiteFactory<TestVectorAlgebra>::makeTest() (TestSuiteFactory.h:20)                                                                            
==20341==    by 0x7F2C6B0: CppUnit::TestFactoryRegistry::addTestToSuite(CppUnit::TestSuite*) (TestFactoryRegistry.cpp:149)                                                            
==20341==    by 0x7F2CAD5: CppUnit::TestFactoryRegistry::makeTest() (TestFactoryRegistry.cpp:136)                                                                                     
==20341==    by 0x580760: main (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 Ответ

2 голосов
/ 29 октября 2009

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

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

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

...