CPPUNIT的環境配置和簡單示例

最近要使用CPPUNIT作單元測試,在網上找了一些資料後就按照流程走了一遍,如今將過程展現一下:函數

1.下載CPPUNIT的材料並編譯相關工程,得到以下的lib文件和dll文件。進入 CppUnit 1.12.1\src目錄下,打開 CppUnitLibraries.dsw,編譯其中的幾個工程:工具

cppunit:生成 cppunitd.lib    
cppunit_dll:生成 cppunitd_dll.lib, cppunitd_dll.dll    
TestRunner:生成 testrunnerud.dll, testrunnerud.lib     
TestPlugInRunner:生成 TestPlugInRunnerd.exe
DllPlugInTester: 生成 DllPlugInTesterd.exe單元測試

這些生成的文件所有放在LIB文件夾中。下載下來後是dsw的工程,須要用vs2005將其轉換成sln工程後再編譯。測試

 

2.將CPPUnitProjectWizard.vsdir  、CPPUnitProjectWizard.vsz這兩個文件到vs安裝的根目錄下面。ui

這兩個文件路徑以下:cppunit-1.12.1\CPPUnitProjectWizardspa

 

3.複製CPPUnitProjectWizard 整個解決方案目錄到Microsoft Visual Studio 8\VC\VCWizards\CPPUnitProjectWizard\CPPUnitProjectWizard下code

 

4.在vs IDE的菜單欄中按照 工具--->選項---->項目和解決方案------->VC目錄中,分別設置CPPUNIT的INCLUDE文件和LIBunicode

文件。get

環境基本上就配好了。string

 

5.下面是個簡單的測試用例:

先建一個基於擴展mfc的動態庫工程DemoDll,再新建一個CDemo類(被測試類)
頭文件以下:

#pragma once

class AFX_EXT_CLASS  CDemo
{
public:
	CDemo(void);
	~CDemo(void);

public:
	int   Add(int i);
	int   Subtration(int i);
public:       
	int   m_iOper; 
};

 

CPP文件以下:

#include "StdAfx.h"
#include "Demo.h"

CDemo::CDemo(void)
{
	m_iOper = 0;
}

CDemo::~CDemo(void)
{
}

int CDemo::Add(int i)
{
    return m_iOper += i;
}



int CDemo::Subtration(int i)
{
      return m_iOper -= i;
}

在同個一解決方案下新建一個測試工程用於測試這個Demo類
新建一個基於Dialog的工程DemoMfcUnitTest。在項目屬性裏 連接器->輸入->附加依賴

項下輸入cppunitd_dll.lib 、testrunnerud.lib(注意是unicode版本)
在App類中 添加下列頭文件,若是有重複請刪除。

#include "stdafx.h"
#include "DemoMfcUnitTest.h"
#include "DemoMfcUnitTestDlg.h"
#include "TDemoMfc_CDemo.h"

#include "cppunit/extensions/TestFactoryRegistry.h"
#include "cppunit/ui/mfc/TestRunner.h"

 

並在IninInstance()函數中把顯示對話框的代碼註銷掉並在原地曾加下列代碼用以顯示測試界面。
 
/*CDemoMfcUnitTestDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此處放置處理什麼時候用「肯定」來關閉
		//  對話框的代碼
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置處理什麼時候用「取消」來關閉
		//  對話框的代碼
	}

	// 因爲對話框已關閉,因此將返回 FALSE 以便退出應用程序,
	//  而不是啓動應用程序的消息泵。
	return FALSE;*/

	#if TRUE
	CppUnit::MfcUi::TestRunner runner;      
	CppUnit::TestFactoryRegistry &registry =
	CppUnit::TestFactoryRegistry::getRegistry(CTDemoMfc_CDemo::RegCaseName());

	runner.addTest(registry.makeTest());
	runner.run(); 
#endif
    
	return TRUE;
 
   
#pragma once

#include "cppunit/TestCase.h"

#include "CppUnit/extensions/HelperMacros.h"

#include <string.h>

#include "../CDemo/Demo.h" // 被測試類




class CTDemoMfc_CDemo: public CppUnit::TestCase

{

	// 宏定義

	CPPUNIT_TEST_SUITE(CTDemoMfc_CDemo); // 開始聲明一個新的測試程序集

	CPPUNIT_TEST(TestAdd);               // 添加TestAdd測試函數到測試程序集

	CPPUNIT_TEST(TestSubtration);     // 添加TestSubtration測試函數到測試程序集

	CPPUNIT_TEST_SUITE_END();          // 聲明結束


public:
	CTDemoMfc_CDemo(void);
	void TestAdd();

	void TestSubtration();

	static  std::string RegCaseName() { return "CTDemoMfc_CDemo";}      


public:
	~CTDemoMfc_CDemo(void);
};
.CPP文件以下:
#include "StdAfx.h"
#include "TDemoMfc_CDemo.h"


#include "cppunit/extensions/TestFactoryRegistry.h"
#include "cppunit/TestAssert.h"

// 對指定程序集進行註冊

CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CTDemoMfc_CDemo,CTDemoMfc_CDemo::RegCaseName());


CTDemoMfc_CDemo::CTDemoMfc_CDemo(void)
{
}

CTDemoMfc_CDemo::~CTDemoMfc_CDemo(void)
{
}

void CTDemoMfc_CDemo::TestAdd()

{

	CDemo  cDemo;

	int iResult = cDemo.Add(10);

	// 宏判斷兩個值是否相等

	CPPUNIT_ASSERT_EQUAL(iResult,10);

}



void CTDemoMfc_CDemo::TestSubtration()

{

	CDemo  cDemo;

	int iResult = cDemo.Subtration(10);

	// 宏判斷兩個值是否相等

	CPPUNIT_ASSERT_EQUAL(iResult,-10);

}
最後程序顯示界面以下。點擊Browse選擇要測試的函數後,點擊Run便可運行。  


 
   在程序運行的過程當中須要在項目工程的屬性中的配置屬性-->輸入-->附加依賴項中cppunitd_dll.lib testrunnerud.lib兩個LIB
文件加進去。還要將文件testrunnerud.dll和testrunnerud.lib拷貝到DEBUG目錄下。
相關文章
相關標籤/搜索