CppUnit leak

works with my regression tests with valgrind. I have a report like this:

== 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)

I assume this is because tests added to Suite are not deleted until main is complete.

So I register the test:

  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") );

How do I unregister these tests?

+3
source share
1 answer

The CppUnit documentation suggests that it runner.addTesttakes responsibility for all the tests that it gave. By providing runner.addTestonly part of your myTest instance, you do not provide any way for the entire myTest instance to be cleared upon deletion. In manual mode, delete'myTest after launch will probably also not work, as it runnerwill also try to remove the part myTestthat it gave.

, testName TextRunner:: run.

( , unit test. UnitTest ++ Google , , CppUnit.)

+2

Source: https://habr.com/ru/post/1721408/


All Articles