最近学习如何进行单元测试,于是研究了一下CppUTest的用法,虽然这工具经常被推荐,但奇怪的是网上资料缺比较少,可能是因为太简单了的原因吧,先记录下来给自己看。
1.下载CppUTest
2.Linux常用安装三板斧
./configure --prefix=目录
make
make install
3.使用
CppUTest上有一个如何开始的说明
先编写一个cpp文件
1 /*注意,这个头文件必须包含,不然编译就报错,比较坑的是官网并没说要添加这个*/ 2 #include "CppUTest/UtestMacros.h" 3 4 TEST_GROUP(FirstTestGroup) 5 { 6 }; 7 8 TEST(FirstTestGroup,FirstTest) 9 { 10 FAIL("fail me!"); 11 }
1 | 然后再编写一个cpp文件 |
1 /*这几个头文件最好都包含了,反正以后也要用*/ 2 3 #include "CppUTest/CommandLineTestRunner.h" 4 #include "CppUTest/TestPlugin.h" 5 #include "CppUTest/TestRegistry.h" 6 #include "CppUTestExt/MockSupportPlugin.h" 7 8 int main(int ac,char** av) 9 { 10 return CommandLineTestRunner::RunAllTests(ac, av); 11 }
1 | |
1 | 最后再编写一个Makefile文件 |
1 CC=gcc 2 CXX=g++ 3 4 #自己定义这个路径 5 CPPUTEST_HOME=/root/usr/cpputest-3.4 6 7 FLAGS= -c 8 9 CPPFLAGS += -I$(CPPUTEST_HOME)/include 10 11 CFLAGS += -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorNewMacros.h 12 CXXFLAGS += -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorMallocMacros.h 13 14 LD_LIBRARIES = -L$(CPPUTEST_HOME)/lib -lCppUTest -lCppUTestExt 15 16 #自己定义最后程序的名称 17 TARGET=alltests 18 19 #自己定义有哪些文件 20 OBJECTS=AllTest.o cpputest.o 21 SOURCES=AllTest.cpp cpputest.cpp 22 23 $(TARGET):$(OBJECTS) 24 $(CXX) $^ $(LD_LIBRARIES) -o $@ 25 26 27 .cpp.o: 28 $(CXX) $(FLAGS) $(CPPFLAGS) $(CXXFLAGS) $< -o $@ 29 30 .c.o: 31 $(CXX) $(FLAGS) $(CPPFLAGS) $(CFLAGS) $< -o $@ 32 33 clean: 34 rm *.o $(TARGET)
然后make通过,就可以直接执行了
最后看到输出“fail me”就哦了。
基本用法的说明
简单的CppUTest分成两个部分
TEST_GROUP(FirstTestGroup) { };
TEST(FirstTestGroup,FirstTest) { }
TEST_GROUP的内部定义自己测试中需要用到的变量和一些自己的函数(变量和函数只有定义在这个里面,属于这一组的测试才能使用这些变量和函数),而且在TEST_GROUP中还可以继承两个CppUTest的函数
void setup(){}//这个函数中对变量进行初始化
void teardown(){}//对一些变量进行销毁
TEST部分中就填入我们想要做的测试用例
CppUTest提供了很多的宏,如CHECK(bool),LONGS_EQUAL(excepted,actual)…等等宏,就行一些检测,而不需要去关心C++语言的类的那些问题,所以CppUTest也可以用于C语言。
目前我能看到的用法就这么多,以后有了新的用法再扩展。
分类:
Linux开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】