4

用 valgrind 运行我的回归测试我有这样的报告:

==20341== 1 个块中的 256 个字节在 919 的丢失记录 915 中间接丢失                                                                                                         
==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::向量<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== 0x585B80:TestVectorAlgebra::addTestsToSuite(CppUnit::TestSuiteBuilderContextBase&) (testvectoralgebra.h:30)                                                          
==20341== by 0x586719: TestVectorAlgebra::suite() (testvectoralgebra.h:42)                                                                                                         
==20341== 0x5948C4:CppUnit::TestSuiteFactory<TestVectorAlgebra>::makeTest() (TestSuiteFactory.h:20)                                                                            
==20341== 0x7F2C6B0:CppUnit::TestFactoryRegistry::addTestToSuite(CppUnit::TestSuite*) (TestFactoryRegistry.cpp:149)                                                            
==20341== 由 0x7F2CAD5: CppUnit::TestFactoryRegistry::makeTest() (TestFactoryRegistry.cpp:136)                                                                                     
==20341== by 0x580760: main (testunit.cpp:88)

我想这是因为添加到套件的测试在主要结束之前没有被删除。

这是我注册测试的方式:

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

如何取消注册这些测试?

4

1 回答 1

2

CppUnit 文档建议它runner.addTest拥有所提供的任何测试的所有权。通过runner.addTest只提供您的 myTest 实例的一部分,您并没有为整个 myTest 实例在删除时得到清理提供任何方法。运行后手动delete'ing myTest 可能也不起作用,因为runner还会尝试删除myTest它已给出的部分。

如果您只对运行特定测试或测试子集感兴趣,则应尝试使用TextRunner::runtestName的参数。

(如果您有时间和兴趣,您可能想研究一个不同的单元测试框架 。UnitTest++Google Test比 CppUnit 更新、更易于使用且功能更多。)

于 2009-10-29T16:59:25.730 回答