二.CUnit arm平台环境配置安装(这里是基于已经安装过Cunit,只是更改运行平台,Cunit的详细安装,详见“cunit基于Linux单元测试环境搭建”) 1.这里configure配置默认的是gcc编译器,现在我们的arm平台的交叉编译器是arm-linux-gnueabihf-gcc,所以接下来,我们需要更改编译器1.autoconf 是一个用于生成shell脚本的工具,可以自动配置软件源代码以适应多种类似POSIX的系统。为了让你的软件包在所有的不同系统上都可以进行编译
2…/configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
3.make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
linux下执行如下命令(执行目录为cunit源码安装包的位置):
root@ubuntu:/home/mf/CUnit-2.1-3# ./configure --prefix=`pwd`/release CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --host=arm-linux
指令说明:
当我们需要指导./configure的参数设置的时候 ,可以执行./configure --help显示所有的参数设置
–prefix=指定cunit软件安装的位置,这里是当前目录下面的/release文件夹,即/home/mf/CUnit-2.1-3/release
CC=指定编译器的类型,这里我们设备的交叉编译工具是arm-linux-gnueabihf-gcc
CXX=指定c++交叉编译工具,arm-linux-gnueabihf-gcc++
–host=指定软件运行的系统平台.如果没有指定,将会运行`config.guess’来检测.指令指定 arm平台
安装完成,没有报错
安装完成查看lib库是否存在,存在,成功啦
这里用到四个文件:Main.c test.c testcase.c Makefile
放在Linux 下面新建的 root@ubuntu:/home/mf/Desktop/cunittest目录下
Main.c
#include#include #include #include #include "Basic.h" extern void AddTests(void); int main(int argc, char* argv[]) { CU_BasicRunMode mode = CU_BRM_VERBOSE; CU_ErrorAction error_action = CUEA_IGNORE; int i; //标准库输出 无缓冲:不使用缓冲。每个 I/O 操作都被即时写入。buffer 和 size 参数被忽略。 setvbuf(stdout, NULL, _IONBF, 0); for (i=1 ; i if (!strcmp("-i", *argv)) { //错误发生时继续执行(默认) error_action = CUEA_IGNORE; } else if (!strcmp("-f", *argv)) { //错误发生时应系统停止 error_action = CUEA_FAIL; } else if (!strcmp("-A", *argv)) { //错误发生时系统应退出(EXIT) error_action = CUEA_ABORT; } else if (!strcmp("-s", *argv)) { //只会输出错误信息 mode = CU_BRM_SILENT; } else if (!strcmp("-n", *argv)) { //结果会输出基本信息,包括失败以及测试运行的总体状况 mode = CU_BRM_NORMAL; } else if (!strcmp("-v", *argv)) { //输出测试运行的详细信息 mode = CU_BRM_VERBOSE; } else if (!strcmp("-e",*argv)) { return 0; } else { printf("nUsage:BasicTest [options]nn" "Options:-i ignore framework errors [default].n" " -f fail on framework error.n" " -A abort on framework error.nn" " -s silent mode - no output to screen.n" " -n normal mode - standard output to screen.n" " -v verbose mode - max output to screen [default].nn" " -e print expected test results and exit.n" " -h print this message and exit.nn"); return 0; } } //CU_initialize_registry registry初始化//用户在调用任何其他CUnit函数之前调用本函数,如果不这样做可能会导致系统崩溃。 if (CU_initialize_registry()) { printf("nInitialization of Test Registry failed."); } else { AddTests(); //CU_basic_set_mode()设置运行模式 CU_basic_set_mode(mode); //CU_set_error_action设置错误发生时,系统的行为 CU_set_error_action(error_action); //CU_basic_run_tests 运行Tests Basic Mode 基本扩展编程方式 非交互式 printf("nTests completed with return value %d.n",CU_basic_run_tests()); // registry释放 CU_cleanup_registry(); } return 0; }
testcase.c
#include#include #include #include #include #include extern int maxi(int i , int j); void testIQJ(void) { //断言相等比较 CU_ASSERT_EQUAL(maxi(1,1),1); CU_ASSERT_EQUAL(maxi(0,-0),0); } void testIGJ(void) { CU_ASSERT_EQUAL(maxi(2,1),2); CU_ASSERT_EQUAL(maxi(0,-1),0); CU_ASSERT_EQUAL(maxi(-1,-2),-1); } void testILJ(void) { CU_ASSERT_EQUAL(maxi(1,2),2); CU_ASSERT_EQUAL(maxi(-1,0),0); CU_ASSERT_EQUAL(maxi(-2,-1),-1); } CU_TestInfo testcases[] = { {"Testing i equals j:",testIQJ}, {"Testing i greater than j:",testIGJ}, {"Testing i less than j:", testILJ}, CU_TEST_INFO_NULL }; int suite_success_init(void) { return 0; } int suite_success_clean(void) { return 0; } //需要运行的test case CU_SuiteInfo suites[] = { {"Testing the function maxi:",suite_success_init,suite_success_clean, NULL, NULL,testcases}, CU_SUITE_INFO_NULL }; void AddTests(void) { //1.CU_get_registry CU_register_suites其他一些关于注册的内部函数,主要用于内部和测试的目的 assert(NULL != CU_get_registry()); assert(!CU_is_test_running()); //注册suites if(CUE_SUCCESS != CU_register_suites(suites)){ fprintf(stderr, "Register suites failed - %s ", CU_get_error_msg()); exit(EXIT_FAILURE); } }
test.c
int maxi(int i,int j)
{
return i>j?i:j;
}
Makefile
INC=-I/home/mf/CUnit-2.1-3/release/include/CUnit LIB=-L/home/mf/CUnit-2.1-3/release/lib all:Main.c test.c testcase.c arm-linux-gnueabihf-gcc -o test $(INC) $(LIB) $^ -lcunit clean: -rm -rf *.o test
Makefile文件说明:INC=和LIB=的路径都要改成arm平台的cunit安装的路径
直接root@ubuntu:/home/mf/Desktop/cunittest# make
生成可执行文件test
1.连接设备,打开控制台,连接设备的网络
设备网络连接的设置:
上传ftpd文件
chmod 777 ftpd
tcpsvd -vE 0.0.0.0 21 /ftpd -wvvS / &
ifconfig eth0 192.168.0.100
电脑设置和设备同一个网段
打开filezilla工具:
上传基于arm平台lib库到设备的lib目录下面
上传完毕后,在设备控制台执行ldconfig命令加载lib库
2.上传可执行文件test到设备
3.修改可执行文件的权限 chmod 777 test
4.运行可执行文件./test,显示测试结果到控制台,移植成功



