2009-10-29 3 views
3

나는 보고서의이 종류가 있습니다CppUnit을 누설

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

나는이 메인이 끝나기 전에 스위트에 추가 테스트하는 사실은 제거되지 않습니다 때문입니다 것 같아요.

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

가 어떻게 그 시험 등록을 취소 않습니다

이 내가 시험을 등록하는 방법은?

+0

나는이 누수 진단 뿐만 아니라 일부 Windows 메모리 프로파일러와 함께. 나는 CppUnit이 지나치게 조작 된 방법이라고 생각한다. 즉, 그것은 쓰레기입니다. –

답변

2

CppUnit documentationrunner.addTest이 주어진 테스트의 소유권을 취합니다. runner.addTest에 myTest 인스턴스의 일부만을 지정하면 전체 myTest 인스턴스를 삭제할 때 정리할 방법이 없습니다. 수동으로 delete을 실행하면 아마도 실행되지 않습니다. runnermyTest 부분을 삭제하려고 시도하기 때문에 작동하지 않습니다.

특정 테스트 또는 하위 테스트 만 실행하려는 경우 testName 매개 변수를 TextRunner::run으로 사용해보십시오.

(당신이 시간과 성향이있는 경우, 당신은 다른 단위 테스트 프레임 워크에보고 할 수 있습니다. UnitTest++Google Test는, 사용하기 쉽게, 그리고 CppUnit을보다 더 풍부한 기능 새로운 있습니다.)

+0

내가 원하는 테스트를 위해 Suite를 등록하지 않으면 TextRunner :: run이 작동하지 않습니다. –

+0

예,하지만 문제는 전체 제품군 (myTest)을 할당 한 다음 일부만 등록한다는 것입니다. TextRunner는 해당 부분을 정리하지만 전체 제품군을 정리하지는 않습니다. –

+0

내가 runner.addTest (myTest)를 수행하더라도; 그러면 나는 똑같은 행동을하고, 많은 스위트는 파괴되지 않습니다. –