搭建CxxTest單元測試框架

CxxTest簡介

CxxTest軟件框架提供了一套代碼框架和代碼生成工具。

測試人員需要使用C++頭文件定義測試用例。在測試用例中,通過定義測試方法,來打包需要的測試項目。測試方法中可以調用開發人員編寫的函數,類,變量,聲明等,來實現對這些函數,類,變量,聲明進行測試和驗證。

測試函數中需要使用CxxTest提供的斷言宏,來測試比較結果。這些結果如果非預期,會被作爲失敗或者異常,被CxxTest記錄下來。從而實現單元測試自動化。

cxxtestgen工具

運行測試程序

集成到makefile框架

一般大型項目,往往都用戶多個可執行程序,多個庫文件,以提供豐富穩定可維護的應用功能。C++代碼一般使用Makefile來管理。通過定義通用的Makefile宏和變量,將

以下就是基於現有項目makefile框架增加和設計的cxxtest引入方式。

增加測試用例目錄及文件列表

在每個模塊目錄下增加test目錄,用於存放測試用例文件。

建議測試用例頭文件使用擴展名.hxx。自動生成的文件擴展名爲.cxx。開發人員使用的頭文件.hpp,源文件.cpp。

這樣規範的好處是使用git等版本管理時,可以區分出文件類型。同時設置ignore文件。

在Makefile文件中定義TESTS變量,包含測試用例文件名,定義TEST_SRCS變量,包含依賴的源文件名(不含擴展名)。

事實上我一般是定義SRCS包含源文件名。這樣只需要

TEST_SRCS = $SRCS就可以避免重複定義列表了。

爲什麼不直接用SRCS呢,因爲TEST_SRCS中不能含main函數的實現。

採用part模式

最後生產可執行

自動執行

可執行程序以test_開頭,後面跟模塊名,可以是庫名,可以是可執行程序名。

可執行程序使用-v開關,可以顯示測試用例中的跟蹤調試日誌信息。

測試用例編寫的考量

#ifndef TEST_LIGHT_TRIGGER_HXX_
#define TEST_LIGHT_TRIGGER_HXX_

#include "light_trigger.hpp"
#include <dm/datetime.hpp>
#include <cxxtest/TestSuite.h>

class TestLightTrigger:public CxxTest::TestSuite{
public:
	void testNextTime(){
		dm::CDateTime dt;
		dt.setYear(2020);
		dt.setMonth(2);
		dt.setDay(3);
		dt.setHour(12);
		dt.setMinute(24);
		dt.setSec(36);

		dm::CTimeStamp now = dt.toTimeStamp();
		dm::CTimeStamp next;

		znjt::CLightTrigger tg;

		TS_TRACE("\u9ed8\u8ba4\u503c");
		TSM_ASSERT_EQUALS("\u7c7b\u578b",tg.getType(),tg.TNone);
		TSM_ASSERT_EQUALS("\u65f6\u95f4",tg.getSecs(),0);
		TSM_ASSERT("\u662f\u5426\u56fa\u5b9a\u65f6\u523b",!tg.isFixed());
		TSM_ASSERT_EQUALS("\u4e0b\u6b21\u65f6\u523b",tg.nextTime(now),now);

		TS_TRACE("\u79d2\u6a21\u5f0f");
		tg.setType(tg.TSecs);
		tg.setSecs(1);

		next = now;
		next.addSec(1);

		TSM_ASSERT("\u662f\u5426\u56fa\u5b9a\u65f6\u523b",!tg.isFixed());
		TSM_ASSERT_EQUALS("\u4e0b\u6b21\u65f6\u523b",tg.nextTime(now),next);

		TS_TRACE("\u5206\u949f\u6a21\u5f0f");
		tg.setType(tg.TByMin);
		tg.setSecs(10);

		TSM_ASSERT("\u662f\u5426\u56fa\u5b9a\u65f6\u523b",tg.isFixed());
		TSM_ASSERT_EQUALS("\u4e0b\u6b21\u65f6\u523b",tg.nextTime(now),next);
	}
};

#endif /* TEST_LIGHT_TRIGGER_HXX_ */

對項目文件的依賴

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章