#ifndef __OJ_H__
#define __OJ_H__
/*内存分配函数*/
void *MLC_MemAlloc(unsigned int ulPidSid, unsigned char ucPtNo, unsigned int ulSize, char *pcFileName, unsigned int ulLine);
/*内存释放函数*/
void MLC_MemFree(unsigned int ulPidSid, void *pAddr);
/*内存泄漏检查函数*/
unsigned int MLC_CheckIfMemLeak(unsigned int *pulAddrNum, void* pAddrArray[]);
/*自动回收泄漏的内存*/
void MLC_CollectMemory(void);
#endif
CExampleTest.cpp
******************************************************************************/
#include <cppunit/config/SourcePrefix.h>
#include "CExampleTest.h"
#include <stdlib.h>
#include "OJ.h"
// 定义测试用的PID
#define PID_TEST_MLC 110
#define DYNAMIC_MEM_PT 1
void *g_paMemLeakAddrArray[2048] = {0}; /*定义存放泄漏的内存块地址的buff*/
// 注册测试套到CppUnit
CPPUNIT_TEST_SUITE_REGISTRATION( CExampleTest);
// SetUp: 在每个用例前执行一次
void CExampleTest::setUp()
{
}
// tearDown: 在每个用例后执行一次
void CExampleTest::tearDown()
{
}
// 测试用例实现示例
/************************************************************************************************/
void CExampleTest::TestCase01() //用例1:没有泄漏
{
unsigned int ulSize = 10;
unsigned int ulMemLeakNum = 0;
void* pAddr = NULL;
memset(g_paMemLeakAddrArray, 0, sizeof(g_paMemLeakAddrArray));
pAddr = MLC_MemAlloc(PID_TEST_MLC, DYNAMIC_MEM_PT, ulSize, __FILE__, __LINE__); // 申请内存
if (NULL != pAddr)
{
MLC_MemFree(PID_TEST_MLC, pAddr); // 释放内存
}
CPPUNIT_ASSERT(0 == MLC_CheckIfMemLeak(&ulMemLeakNum, g_paMemLeakAddrArray));
CPPUNIT_ASSERT(0 == ulMemLeakNum);
}
/************************************************************************************************/
void CExampleTest::TestCase02()
{
}
/************************************************************************************************/
void CExampleTest::TestCase03()
{
}
/************************************************************************************************/
void CExampleTest::TestCase04()
{
}
/************************************************************************************************/
// 在这里添加测试用例实现
// void CExampleTest::TestCasexx()
// {
//
// }
CExampleTest.h
******************************************************************************/
#ifndef _CEXAMPLE_TEST_H
#define _CEXAMPLE_TEST_H
#include <cppunit/extensions/HelperMacros.h>
class CExampleTest : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE( CExampleTest );
// CPPUNIT_TEST( TestCase01 );
// CPPUNIT_TEST( TestCase02 );
// CPPUNIT_TEST( TestCase03 );
// CPPUNIT_TEST( TestCase04 );
// CPPUNIT_TEST( TestCase05 );
// CPPUNIT_TEST( TestCase06 );
// CPPUNIT_TEST( TestCase07 );
// CPPUNIT_TEST( TestCase08 );
// CPPUNIT_TEST( TestCase09 );
// CPPUNIT_TEST( TestCase10 );
// CPPUNIT_TEST( TestCase11 );
// CPPUNIT_TEST( TestCase12 );
// CPPUNIT_TEST( TestCase13 );
// CPPUNIT_TEST( TestCase14 );
// CPPUNIT_TEST( TestCase15 );
// CPPUNIT_TEST( TestCase16 );
// CPPUNIT_TEST( TestCase17 );
// CPPUNIT_TEST( TestCase18 );
// CPPUNIT_TEST( TestCase19 );
// CPPUNIT_TEST( TestCase20 );
// 在这里添加测试用例声明, 将测试用例加入测试套
// CPPUNIT_TEST( TestCasexx );
CPPUNIT_TEST_SUITE_END();
public:
void setUp();
void tearDown();
void TestCase01();
void TestCase02();
void TestCase03();
void TestCase04();
// void TestCase05();
// void TestCase06();
// void TestCase07();
// void TestCase08();
// void TestCase09();
// void TestCase10();
// void TestCase11();
// void TestCase12();
// void TestCase13();
// void TestCase14();
// void TestCase15();
// void TestCase16();
// void TestCase17();
// void TestCase18();
// void TestCase19();
// void TestCase20();
// 在这里添加测试用例声明, 声明测试类的成员函数
// void TestCasexx();
};
#endif /*_CEXAMPLE_TEST_H*/
main,cpp
******************************************************************************/
#include <cppunit/TextOutputter.h>
#include <cppunit/XmlOutputter.h>
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>
#include "conio.h"
int main(int argc, char* argv[])
{
// Create the event manager and test controller
CPPUNIT_NS::TestResult controller;
// Add a listener that colllects test result
CPPUNIT_NS::TestResultCollector result;
controller.addListener( &result );
// Add a listener that print dots as test run.
CPPUNIT_NS::BriefTestProgressListener progress;
controller.addListener( &progress );
// Add the top suite to the test runner
CPPUNIT_NS::TestRunner runner;
runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry("All Tests").makeTest() );
runner.run( controller );
// Print test in a text format.
CPPUNIT_NS::TextOutputter outputter( &result, CPPUNIT_NS::stdCOut() );
outputter.write();
// This for XML output
std::ofstream file( "TestResult.xml" );
CPPUNIT_NS::XmlOutputter xml( &result, file );
xml.setStyleSheet( "report.xsl" );
xml.write();
file.close();
getch();
return result.wasSuccessful() ? 0 : 1;
}