[問題] 關於Unit Test的疑惑
晚安
最近在思考有關程式設計的問題
其中有關Unit Test的部份
小弟一直搞不清楚C或C++在網路上找到的一些Test framwork
有什麼特別的地方嗎?
感覺似乎是幫忙比較測試的結果以及做一個結果的呈現
實際的測試應該還是要自己去寫
舉例來說:假設我今天要寫一個切割字串的函式
我將這些功能寫在一個class CStrToken裡
並提供了一個函數給使用者呼叫
//回傳值 : 一個存放切割字串的二維陣列
//szStr : 要切割的字串內容
//iLen : 要切割的字串長度
//chToken : 切割字串的依據
//piStrCnt : 切割後的字串個數
//piRes : 錯誤代碼(0表示成功,其餘為失敗值)
char** GetString(char *szStr, int iLen, char chToken, int *piStrCnt, int
*piRes);
底下是我寫的測試程式
#include <stdio.h>
#include <stdlib.h>
#include "../StrToken.h"
//---------------------------------------------------------------------------
//測試用的Token
char g_szToken[33] = {' ','!','\"','#','$','%','&','\'','(',')','*','+',',',
'-','.','/',':',';','<','=','>','?','@','[','\\',']',
'^','_','`','{','|','}','~'};
//判斷是否成功
int g_iOk = 1;
//要測試的字串
char *g_pszTest;
//Parse後的比較字串
char *g_pszCmp;
//要測試的字串長度
int g_iStrSize;
//Error寫檔用
FILE *g_f = NULL;
//---------------------------------------------------------------------------
void GetTestStr(int iLen, int iCount, char chToken)
{
memset(g_pszTest, 0x00, g_iStrSize+1);
memset(g_pszCmp, 0x00, g_iStrSize+1);
int index = 0;
for(int i = 0; i < iCount; i++)
{
for(int j = 0; j < iLen; j++)
{
g_pszTest[index] = (rand()%95)+32;
if(g_pszTest[index] == chToken)
j--;
else
index++;
}
if((i+1) != iCount)
{
g_pszTest[index] = chToken;
index++;
}
}
}
//---------------------------------------------------------------------------
void CompareTest(char chToken)
{
CStrToken oToken;
char **pszStr;
int iStrCount = -999;
int iRes = -999;
pszStr = oToken.GetString(g_pszTest,
g_iStrSize,
chToken,
&iStrCount,
&iRes);
if(pszStr != NULL)
{
int k = 0;
int iStrLen;
for(int i = 0; i < iStrCount; i++)
{
iStrLen = strlen(pszStr[i]);
memcpy(&g_pszCmp[k], pszStr[i], iStrLen);
if((i+1) != iStrCount)
{
g_pszCmp[k+iStrLen] = chToken;
k += (iStrLen+1);
}
}
if(strcmp(g_pszTest, g_pszCmp) != 0)
{
g_iOk = 0;
fprintf(g_f, "ErrorTest:\r\n");
fprintf(g_f, "Token = %c\r\n", chToken);
fprintf(g_f, "OriStr = %s\r\n", g_pszTest);
fprintf(g_f, "CmpStr = %s\r\n\r\n", g_pszCmp);
}
}
else
{
g_iOk = 0;
fprintf(g_f, "ErrorStrToken:\r\n");
fprintf(g_f, "StrCount = %d\r\n", iStrCount);
fprintf(g_f, "ErrCode = %d\r\n\r\n", iRes);
}
}
//---------------------------------------------------------------------------
void DeleteFile(void)
{
g_f = fopen("TestResult.txt", "wb");
if(g_f)
{
fclose(g_f);
}
}
//---------------------------------------------------------------------------
void InitVar(int iCount, int iLen)
{
g_iStrSize = (iCount*iLen+iCount-1);
g_pszTest = new char[g_iStrSize+1];
g_pszCmp = new char[g_iStrSize+1];
}
//---------------------------------------------------------------------------
void ResetVar(void)
{
if(g_pszTest)
{
delete g_pszTest;
g_pszTest = NULL;
}
if(g_pszCmp)
{
delete g_pszCmp;
g_pszCmp = NULL;
}
fclose(g_f);
}
//---------------------------------------------------------------------------
void ShowResult(void)
{
if(!g_iOk)
printf("Test Fail ! \n\n");
else
printf("Test Success ! \n\n");
}
//---------------------------------------------------------------------------
int main(int argc, char *argv[])
{
srand((unsigned int)time(0));
DeleteFile();
g_f = fopen("TestResult.txt", "ab");
if(g_f == NULL)
return 0;
int iDo;
int iLen;
int iCount;
printf("請輸入字串的個數 : ");
scanf("%d", &iCount);
printf("請輸入各字串的長度 : ");
scanf("%d", &iLen);
printf("請輸入測試的次數 : ");
scanf("%d", &iDo);
printf("\r\n");
InitVar(iCount, iLen);
//開始測試
char chToken;
for(int i = 0; i < iDo; i++)
{
for(int j = 0; j < 33; j++)
{
chToken = g_szToken[j];
GetTestStr(iLen, iCount, chToken);
CompareTest(chToken);
}
}
ResetVar();
ShowResult();
system("PAUSE");
return 0;
}
//---------------------------------------------------------------------------
總覺得自己寫的測試程式無法套用在現成的framework上
也或許是自己不是很懂Unit Test
網路上說Unit Test應該要簡單、易懂
所以是我誤會了Unit Test的意義嗎?
不知道有沒有人可以幫我解惑呢?
感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.232.211.161
推
07/11 00:26, , 1F
07/11 00:26, 1F
→
07/11 00:27, , 2F
07/11 00:27, 2F
→
07/11 00:28, , 3F
07/11 00:28, 3F
→
07/11 00:28, , 4F
07/11 00:28, 4F
→
07/11 00:29, , 5F
07/11 00:29, 5F
→
07/11 00:30, , 6F
07/11 00:30, 6F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章