上一篇学习翻译了CUnit官方文档,本篇我们来实际操作运行看看效果。正好目前正在做一个Linux的嵌入式项目,一通疯狂操作后终于把这个框架嵌入项目中了,今天主要是运行Console模式,实际效果如下:
1.菜单
1.1 主菜单
***************** CUNIT CONSOLE - MAIN MENU ******************************
(R)un (S)elect (L)ist (A)ctivate (F)ailures (O)ptions (H)elp (Q)uit
Enter command: h
输入H(elp)后可以查看主菜单各个选项的说明:
Commands:
R - run all tests in all suites
S - Select a suite to run or modify
L - List all registered suites
A - Activate or deactivate a suite (toggle)
F - Show failures from last test run
O - Set CUnit options
H - Show this help message
Q - Quit the application
1.2 Suite菜单
输入L(ist)后,可以列出当前所有注册的套件。
***************** CUNIT CONSOLE - MAIN MENU ******************************
(R)un (S)elect (L)ist (A)ctivate (F)ailures (O)ptions (H)elp (Q)uit
Enter command: l
--------------------- Registered Suites -----------------------------
# Suite Name Init? Cleanup? #Tests Active?
1. SuiteOS Yes Yes 2 Yes
2. SuiteDsc Yes Yes 4 Yes
---------------------------------------------------------------------
Total Number of Suites : 2
1.3 Test菜单
输入(S)elect后会列出注册的套件,并让你输入一个序号选择其中一个套件进入SUITE菜单。
在SUITE菜单中输入(L)ist可以列出这个套件中所有的Test。
***************** CUNIT CONSOLE - MAIN MENU ******************************
(R)un (S)elect (L)ist (A)ctivate (F)ailures (O)ptions (H)elp (Q)uit
Enter command: s
--------------------- Registered Suites -----------------------------
# Suite Name Init? Cleanup? #Tests Active?
1. SuiteOs Yes Yes 2 Yes
2. SuiteDsc Yes Yes 9 Yes
---------------------------------------------------------------------
Total Number of Suites : 2
Enter number of suite to select (1-2) : 2
Suite 'SuiteDsc' selected.
***************** CUNIT CONSOLE - SUITE MENU ***************************
(R)un (S)elect (L)ist (A)ctivate (F)ailures (U)p (O)ptions (H)elp (Q)uit
Enter command: l
----------------- Test List ------------------------------
Suite: SuiteDsc
# Test Name Active?
1. DSC_T1_OpenErr Yes
2. DSC_T1_OpenSuc1 Yes
3. DSC_T1_OpenSuc2 Yes
4. DSC_T1_CloseErr Yes
----------------------------------------------------------
Total Number of Tests : 4
2.运行测试
2.1 执行单个Suite
在SUITE菜单中输入( R)un可以执行当前这个Suite中所有的Test。最后会生产一个简单的Run Summary。
***************** CUNIT CONSOLE - SUITE MENU ***************************
(R)un (S)elect (L)ist (A)ctivate (F)ailures (U)p (O)ptions (H)elp (Q)uit
Enter command: r
Running Suite : SuiteDsc
Running Test : DSC_T1_OpenErr
Running Test : DSC_T1_OpenSuc1
Running Test : DSC_T1_OpenSuc2
Running Test : DSC_T1_CloseErr
Run Summary: Type Total Ran Passed Failed Inactive
suites 2 1 n/a 0 0
tests 6 4 2 2 0
asserts 11 11 8 3 n/a
Elapsed time = 0.302 seconds
2.2 执行单个Test
当然也可以在SUITE菜单中输入(S)elect,然后再输入具体的序号选择测试其中某一个Test。最后也会生产一个Run Summary。
***************** CUNIT CONSOLE - SUITE MENU ***************************
(R)un (S)elect (L)ist (A)ctivate (F)ailures (U)p (O)ptions (H)elp (Q)uit
Enter command: s
----------------- Test List ------------------------------
Suite: SuiteDsc
# Test Name Active?
1. DSC_T1_OpenErr Yes
2. DSC_T1_OpenSuc1 Yes
3. DSC_T1_OpenSuc2 Yes
4. DSC_T1_CloseErr Yes
----------------------------------------------------------
Total Number of Tests : 4
Enter number of test to select (1-4) : 1
Running Suite : SuiteDsc
Running Test : DSC_T1_OpenErr
Run Summary: Type Total Ran Passed Failed Inactive
suites 3 0 n/a 0 0
tests 12 1 1 0 0
asserts 1 1 1 0 n/a
Elapsed time = 0.020 seconds
2.3 执行所有Suite
在MAIN菜单中输入( R)un可以执行所有的Suite测试。最后也会生产一个Run Summary。
***************** CUNIT CONSOLE - MAIN MENU ******************************
(R)un (S)elect (L)ist (A)ctivate (F)ailures (O)ptions (H)elp (Q)uit
Enter command: r
Running Suite : SuiteOS
Running Test : OS_T1_SLEEP_1
Running Test : OS_T1_SLEEP_2
Running Suite : SuiteDsc
Running Test : DSC_T1_OpenErr
Running Test : DSC_T1_OpenSuc1
Running Test : DSC_T1_OpenSuc2
Running Test : DSC_T1_CloseErr
Run Summary: Type Total Ran Passed Failed Inactive
suites 2 2 n/a 0 0
tests 6 6 4 2 0
asserts 18 18 14 4 n/a
Elapsed time = 0.407 seconds
3.失败项
每次测试结束都可以输入(F)ailures查看详细的失败项。注意,只会保存最后一次执行的测试失败项。
***************** CUNIT CONSOLE - SUITE MENU ***************************
(R)un (S)elect (L)ist (A)ctivate (F)ailures (U)p (O)ptions (H)elp (Q)uit
Enter command: f
--------------- Test Run Failures -------------------------
src_file:line# : (suite:test) : failure_condition
1. /home/suyd/other/env/dts3452/Project_v28/ACS/ViaccessDta/UnitTest/VoUnitTestDsc.c:55 : (SuiteDsc : DSC_T1_OpenSuc1) : hDsc!=kVA_ILLEGAL_HANDLE
2. /home/suyd/other/env/dts3452/Project_v28/ACS/ViaccessDta/UnitTest/VoUnitTestDsc.c:62 : (SuiteDsc : DSC_T1_OpenSuc1) : VA_DSCR_Close(hDsc)==kVA_OK
3. /home/suyd/other/env/dts3452/Project_v28/ACS/ViaccessDta/UnitTest/VoUnitTestDsc.c:73 : (SuiteDsc : DSC_T1_OpenSuc2) : hDsc0!=kVA_ILLEGAL_HANDLE
4. /home/suyd/other/env/dts3452/Project_v28/ACS/ViaccessDta/UnitTest/VoUnitTestDsc.c:78 : (SuiteDsc : DSC_T1_OpenSuc2) : VA_DSCR_Close(hDsc0)==kVA_OK
-----------------------------------------------------------
Total Number of Failures : 4
4.源码
最后附上上面运行测试的源码,Test运行的源码我就不上传了,大家可以参考自己测试内容实现即可。
CU_ErrorCode VO_UnitTest_RegisterOs(void)
{
CU_pSuite pSuite;
mVUT_FCT_ENTER();
pSuite = CU_add_suite("SuiteOs", VO_SuiteOS_Init, VO_SuiteOS_Clean);
if (NULL == pSuite) {
mVUT_RETURN(CU_get_error());
}
if( (NULL == CU_add_test(pSuite, "OS_T1_SLEEP_1", VO_TestOS_Case1_Sleep1)) ||
(NULL == CU_add_test(pSuite, "OS_T1_SLEEP_2", VO_TestOS_Case1_Sleep2)) )
{
mVUT_RETURN(CU_get_error());
}
mVUT_RETURN(CUE_SUCCESS);
}
CU_ErrorCode VO_UnitTest_RegisterDsc(void)
{
CU_ErrorCode cu_err=CUE_SUCCESS;
mVUT_FCT_ENTER();
CU_TestInfo test_array[] = {
{ "DSC_T1_OpenErr", VO_TestDsc_Case1_OpenErr },
{ "DSC_T1_OpenSuc1", VO_TestDsc_Case1_OpenSuc1 },
{ "DSC_T1_OpenSuc2", VO_TestDsc_Case1_OpenSuc2 },
{ "DSC_T1_CloseErr", VO_TestDsc_Case1_CloseErr },
CU_TEST_INFO_NULL,
};
CU_SuiteInfo suite_array[] = {
{ "SuiteDsc", VO_SuiteDsc_Init, VO_SuiteDsc_Clean, NULL, NULL, test_array },
CU_SUITE_INFO_NULL,
};
cu_err = CU_register_suites(suite_array);
if (cu_err!=CUE_SUCCESS)
{
mVUT_TRACE((kVUT_NIV_CRITICAL,"CU_register_suites failed=%d.\n",cu_err));
mVUT_RETURN(cu_err);
}
mVUT_RETURN(CUE_SUCCESS);
}
CU_ErrorCode VO_UnitTest_RegisterCommands(void)
{
CU_ErrorCode cu_err=CUE_SUCCESS;
mVUT_FCT_ENTER();
if(NULL == CU_get_registry())
{
mVUT_TRACE((kVUT_NIV_CRITICAL,"CU_get_registry failed\n"));
mVUT_RETURN(CUE_NOREGISTRY);
}
cu_err = VO_UnitTest_RegisterOs();
if (cu_err!=CUE_SUCCESS)
{
mVUT_TRACE((kVUT_NIV_CRITICAL,"VO_UnitTest_RegisterOs failed=%d.\n",cu_err));
mVUT_RETURN(cu_err);
}
cu_err = VO_UnitTest_RegisterDsc();
if (cu_err!=CUE_SUCCESS)
{
mVUT_TRACE((kVUT_NIV_CRITICAL,"VO_UnitTest_RegisterDsc failed=%d.\n",cu_err));
mVUT_RETURN(cu_err);
}
mVUT_RETURN(CUE_SUCCESS);
}
void VO_UnitTest_EntryConsole(void)
{
CU_ErrorCode cu_err=CUE_SUCCESS;
mVUT_FCT_ENTER();
cu_err = CU_initialize_registry();
if (cu_err!=CUE_SUCCESS)
{
mVUT_TRACE((kVUT_NIV_CRITICAL,"CU_initialize_registry failed=%d.\n",cu_err));
mVUT_RETURN;
}
cu_err = VO_UnitTest_RegisterCommands();
if (cu_err!=CUE_SUCCESS)
{
mVUT_TRACE((kVUT_NIV_CRITICAL,"VO_UnitTest_RegisterCommands failed=%d.\n",cu_err));
CU_cleanup_registry();
mVUT_RETURN;
}
//block here, and wait for console input
CU_console_run_tests();
mVUT_TRACE((kVUT_NIV_INFO,"Test end, CU_cleanup_registry call\n"));
CU_cleanup_registry();
mVUT_RETURN;
}