1 CUnit 单元测试工具的安装
- 借鉴博客
cunit在linux的安装
2 关于cunit编译成第3库添加到eclipse中使用
- 参考博客,里面有详细介绍
eclipse添加第3方库
3 cunit示例demo
- 通常用法
使用CUnit框架的典型步骤是:
编写待测函数(必要时,还得编写套件的 init/cleanup 函数)。
初始化测试注册表(Test Registry) - CU_initialize_registry()
将套件(Suite)添加到测试注册表 - CU_add_suite()
将测试用例(Test)加到套件里 - CU_add_test()
调用合适的接口函数执行测试,例如CU_console_run_tests
清除测试注册表 - CU_cleanup_registry
/*
============================================================================
Name : cunit_test_demo.c
Author : xhome
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "CUnit/CUnit.h"
#include "CUnit/Basic.h"
#include "CUnit/Automated.h"
//加法函数
int add_func(int a, int b)
{
return a+b;
}
//除法函数
double div_func(int a, int b)
{
if(b == 0){
printf("b is 0.");
return -1;
}
return a/b;
}
//开辟空间
char * malloc_func(int size)
{
char * p = NULL;
p = (char *)malloc(size * sizeof(char));
if(p == NULL)
{
return NULL;
}
return p;
}
//add case
void add_func_case(void)
{
int expectValue = 0;
expectValue = 9;
CU_ASSERT_TRUE(expectValue == add_func(4, 5));
expectValue = 11;
CU_ASSERT_TRUE(expectValue == add_func(10, 1));
}
//div case
void div_func_case(void)
{
int retValue = 0;
retValue = 2;
CU_ASSERT_TRUE(retValue == div_func(10,5));
retValue = 3;
CU_ASSERT_TRUE(retValue == div_func(9,3));
retValue = -1;
CU_ASSERT(retValue == div_func(9,0));
}
//div case
void malloc_func_case(void)
{
//可以使用专门的指针地址测试函数
CU_ASSERT(malloc_func(-1) == NULL);
CU_ASSERT(malloc_func(1024) != NULL);
}
//init
int cunit_test_init(void)
{
return 0;
}
//cleanup
int cunit_test_cleanup(void)
{
return 0;
}
// test cases
CU_TestInfo cunit_test_case[] = {
{"add_func_case", add_func_case},
{"div_func_case", div_func_case},
CU_TEST_INFO_NULL,
};
// test cases
CU_TestInfo cunit_ptr_case[] = {
{"malloc_func_case", malloc_func_case},
CU_TEST_INFO_NULL,
};
// suite
CU_SuiteInfo suites[] =
{
{ "Test demo", cunit_test_init, cunit_test_cleanup, NULL, NULL, cunit_test_case },
{ "Test demo1", cunit_test_init, cunit_test_cleanup, NULL, NULL, cunit_ptr_case },
CU_SUITE_INFO_NULL,
};
int main(void) {
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
if(CUE_SUCCESS != CU_initialize_registry()){
printf("<CUnit Test> CU_initialize_registry fail!!!\n");
return CU_get_error();
}
if(CUE_SUCCESS != CU_register_suites(suites)){
printf("<CUnit Test> CU_register_suites fail!!!\n");
CU_cleanup_registry();
return CU_get_error();
}
#if 1
//output file.xml
CU_set_output_filename("cunit_test_demo");
CU_list_tests_to_file();
CU_automated_run_tests();
#endif
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();
CU_cleanup_registry();
return EXIT_SUCCESS;
}
4 展示效果
5 CUnit 的交叉编译
./configure --host=arm-linux --prefix=/home/xxx/opt_soft/cunit_arm_install CC=/home/xxx/petalinux2018.3/tools/linux-i386/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
make
make install