unity单元测试使用

unity 单元测试框架的使用

unity 官方文档提供了如下两种使用方式

方式一

int main(void)
{
    UnityBegin("test/TestProductionCode.c");
    RUN_TEST(test_Function1);
    RUN_TEST(test_Function2);
    RUN_TEST(test_Function3);
    RUN_TEST(test_Function4);
    RUN_TEST(test_Function5);
    return (UnityEnd());
}

测试开始前使用UnityBegin(const char* filename)初始化,测试结束后调用UnityEnd()输出执行结果,返回用例失败的个数。中间用RUN_TEST(case_name)宏指定测试例。

方式二

// test.cpp
#include "unity.h"
#include "unity_fixture.h"

TEST_GROUP(module);
TEST_SETUP(module){

}
TEST_TEAR_DOWN(module){

}
TSET(module, case1){

}
TSET(module, case2){

}
TEST_GROUP_RUNNER(module){
    RUN_TEST_CASE(module, case1);
    RUN_TEST_CASE(module, case2);
}

//main.cpp
static void RunAllTests(void){
    RUN_TEST_GROUP(module);
    // RUN_TEST_GROUP(module_2);
    // RUN_TEST_GROUP(module_3);
}

int main(){
    return UnityMain(argc, argv, RunAllTests);
}
TEST_GROUP(xxx)         // 测试套件声明,名称xxx可自定义
TEST_SETUP(xxx)         // 每个测试例 测试前的启动代码,主要实现测试用例共用的资源准备工作,如无需要可空处理
TEST_TEAR_DOWN(xxx)     // 每个测试例 测试后的清理代码,主要实现测试用例共用的资源清理工作,如无需要可空处理
TEST(xxx, yyy)          // 每个测试例的主要实现代码,xxx为测试套件名,yyy为测试用例名,可自行定义。测试例可以有多个
TEST_GROUP_RUNNER(xxx)  // 指定要运行的测试例,内部使用RUN_TEST_CASE(xxx, yyy)指定具体的测试例

每个测试套件用上面一组宏接口,便可以组织起整个测试。方式二比方式一更有优势,可以解耦各个测试例,将测试例按不同套件区分,同时可以指定测试用例执行前后的资源配置和回收操作。

unity提供了一系列的断言宏TEST_ASSERT_*,用来做结果校验,当测试例失败时,可以明确地提示并中断当前的测试用例。

// 条件相关的断言
TEST_ASSERT_TRUE(condition)
TEST_ASSERT_FALSE(condition)
TEST_ASSERT_NULL(pointer)
TEST_ASSERT_NOT_NULL(pointer)
...

// 值对比, 相等判断
TEST_ASSERT_EQUAL_INT(expected, actual)
TEST_ASSERT_EQUAL_UINT(expected, actual)
TEST_ASSERT_EQUAL_INT32(expected, actual)
TEST_ASSERT_EQUAL_UINT32(expected, actual)
...

// 值对比, 不等判断
TEST_ASSERT_NOT_EQUAL_INT(threshold, actual)
TEST_ASSERT_NOT_EQUAL_UINT(threshold, actual)
TEST_ASSERT_NOT_EQUAL_INT32(threshold, actual)
TEST_ASSERT_NOT_EQUAL_UINT32(threshold, actual)
...

// 值对比,大小判断
TEST_ASSERT_GREATER_THAN_INT32(threshold, actual)
TEST_ASSERT_GREATER_OR_EQUAL_INT32(threshold, actual)
TEST_ASSERT_LESS_THAN_INT32(threshold, actual)
TEST_ASSERT_LESS_OR_EQUAL_INT32(threshold, actual)
...

参考资料

  1. https://github.com/ThrowTheSwitch/Unity
posted @   流翎  阅读(938)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示