4

valgrind で回帰テストを実行すると、次のようなレポートが表示されます。

==20341== 919 件中 915 件の損失レコードで 1 ブロックの 256 バイトが間接的に失われています                                                                                                         
==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: メイン (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与えられたテストの所有権を取得することを示唆しています。myTestインスタンスの一部のみを指定することによりrunner.addTest、myTestインスタンス全体を削除時にクリーンアップする方法を提供しなくなります。delete実行後にmyTestを手動で実行しても、指定されrunnerた部分も削除しようとするため、おそらく機能しませんmyTest

特定のテストまたはテストのサブセットのみを実行することに関心がある場合は、代わりにTextRunner::runtestNameのパラメーターを使用してみてください。

(時間と傾向がある場合は、別の単体テストフレームワークを検討することをお勧めします 。UnitTest++Google Testは、CppUnitよりも新しく、使いやすく、機能が豊富です。)

于 2009-10-29T16:59:25.730 に答える