ThrowTheSwitch/Unity

GitHub: ThrowTheSwitch/Unity

专为嵌入式 C 语言设计的轻量级单元测试框架,核心极简且提供丰富的断言库,适配各种微控制器架构。

Stars: 5083 | Forks: 1096

# Unity 测试 ![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/84f76c2905210612.svg) __版权所有 (c) 2007 - 2024 Unity Project,作者 Mike Karlesky, Mark VanderVoord 和 Greg Williams__ 欢迎使用 Unity Test Project,这是 ThrowTheSwitch.org 的主要项目之一。 Unity Test 是一个为 C 语言构建的单元测试框架,专注于嵌入式工具链的使用。 该项目旨在测试针对大大小小微控制器的代码。 核心项目仅包含一个 C 文件和一对头文件,使其能够轻松添加到您现有的构建设置中。 您可以使用任何您喜欢的编译器,并且可以使用大多数现有的构建系统,包括 Make、CMake 等。 如果您想把繁重的工作交给我们,您可能会对 Ceedling 感兴趣,这是 ThrowTheSwitch.org 提供的另一个构建工具。 如果您是 Unity 的新手,我们建议您浏览一下 [getting started guide][]。 您还可以在我们的文档中找到 [change log][] 和 [known issues][]。 ## 入门指南 [docs][] 文件夹包含 [getting started guide][] 以及更多关于使用 Unity 的技巧。 ## Unity 断言摘要 完整列表请参阅 [UnityAssertionsReference.md][]。 ### 基本有效性测试 ``` TEST_ASSERT_TRUE(condition) ``` 评估 condition 中的代码,如果评估结果为 false 则失败 ``` TEST_ASSERT_FALSE(condition) ``` 评估 condition 中的代码,如果评估结果为 true 则失败 ``` TEST_ASSERT(condition) ``` 调用 `TEST_ASSERT_TRUE` 的另一种方式 ``` TEST_ASSERT_UNLESS(condition) ``` 调用 `TEST_ASSERT_FALSE` 的另一种方式 ``` TEST_FAIL() TEST_FAIL_MESSAGE(message) ``` 此测试自动标记为失败。 输出说明原因的消息。 ### 数值断言:整数 ``` TEST_ASSERT_EQUAL_INT(expected, actual) TEST_ASSERT_EQUAL_INT8(expected, actual) TEST_ASSERT_EQUAL_INT16(expected, actual) TEST_ASSERT_EQUAL_INT32(expected, actual) TEST_ASSERT_EQUAL_INT64(expected, actual) ``` 比较两个整数是否相等,并将错误显示为有符号整数。 会将其转换为您的自然整数大小,因此通常可以直接使用。 当您需要指定确切大小时,可以使用特定版本。 ``` TEST_ASSERT_EQUAL_UINT(expected, actual) TEST_ASSERT_EQUAL_UINT8(expected, actual) TEST_ASSERT_EQUAL_UINT16(expected, actual) TEST_ASSERT_EQUAL_UINT32(expected, actual) TEST_ASSERT_EQUAL_UINT64(expected, actual) ``` 比较两个整数是否相等,并将错误显示为无符号整数。 与 INT 一样,也有针对不同大小的变体。 ``` TEST_ASSERT_EQUAL_HEX(expected, actual) TEST_ASSERT_EQUAL_HEX8(expected, actual) TEST_ASSERT_EQUAL_HEX16(expected, actual) TEST_ASSERT_EQUAL_HEX32(expected, actual) TEST_ASSERT_EQUAL_HEX64(expected, actual) ``` 比较两个整数是否相等,并将错误显示为十六进制。 与其他整数比较一样,您可以指定大小…… 这里的大小也会影响显示的半字节数量(例如,`HEX16` 将显示 4 个半字节)。 ``` TEST_ASSERT_EQUAL(expected, actual) ``` 调用 TEST_ASSERT_EQUAL_INT 的另一种方式 ``` TEST_ASSERT_INT_WITHIN(delta, expected, actual) ``` 断言实际值在预期值的正负 delta 范围内。 这也有特定大小的变体。 ``` TEST_ASSERT_GREATER_THAN(threshold, actual) ``` 断言实际值大于阈值。 这也有特定大小的变体。 ``` TEST_ASSERT_LESS_THAN(threshold, actual) ``` 断言实际值小于阈值。 这也有特定大小的变体。 ### 数组 ``` _ARRAY ``` 您可以将 `_ARRAY` 附加到任何这些宏,以对该类型进行数组比较。 在这里,您需要更加关注被检查值的实际大小。 您还需要指定一个额外的参数,即要比较的元素数量。 例如: ``` TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, elements) _EACH_EQUAL ``` 另一个数组比较选项是检查数组的每个元素是否等于单个预期值。 您可以通过指定 EACH_EQUAL 宏来实现。 例如: ``` TEST_ASSERT_EACH_EQUAL_INT32(expected, actual, elements) ``` ### 数值断言:位操作 ``` TEST_ASSERT_BITS(mask, expected, actual) ``` 使用整数掩码指定应比较两个其他整数之间的哪些位。 比较掩码中的高位,忽略低位。 ``` TEST_ASSERT_BITS_HIGH(mask, actual) ``` 使用整数掩码指定应检查哪些位,以确定它们是否全部置为高电平。 比较掩码中的高位,忽略低位。 ``` TEST_ASSERT_BITS_LOW(mask, actual) ``` 使用整数掩码指定应检查哪些位,以确定它们是否全部置为低电平。 比较掩码中的高位,忽略低位。 ``` TEST_ASSERT_BIT_HIGH(bit, actual) ``` 测试单个位并验证其是否为高电平。 对于 32 位整数,该位指定为 0-31。 ``` TEST_ASSERT_BIT_LOW(bit, actual) ``` 测试单个位并验证其是否为低电平。 对于 32 位整数,该位指定为 0-31。 ### 数值断言:浮点数 ``` TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual) TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual) ``` 断言实际值在预期值的正负 delta 范围内。 ``` TEST_ASSERT_FLOAT_NOT_WITHIN(delta, expected, actual) TEST_ASSERT_DOUBLE_NOT_WITHIN(delta, expected, actual) ``` 断言实际值不在预期值的正负 delta 范围内。 ``` TEST_ASSERT_EQUAL_FLOAT(expected, actual) TEST_ASSERT_EQUAL_DOUBLE(expected, actual) ``` 断言两个浮点值在预期值的微小百分比 delta 内“相等”。 ``` TEST_ASSERT_NOT_EQUAL_FLOAT(expected, actual) TEST_ASSERT_NOT_EQUAL_DOUBLE(expected, actual) ``` 断言两个浮点值在预期值的微小百分比 delta 内“不相等”。 ``` TEST_ASSERT_LESS_THAN_FLOAT(threshold, actual) TEST_ASSERT_LESS_THAN_DOUBLE(threshold, actual) TEST_ASSERT_GREATER_THAN_FLOAT(threshold, actual) TEST_ASSERT_GREATER_THAN_DOUBLE(threshold, actual) ``` 断言实际值小于或大于阈值。 还有 `LESS_OR_EQUAL` 和 `GREATER_OR_EQUAL` 变体。 它们遵守与 `TEST_ASSERT_EQUAL_FLOAT` 和 `TEST_ASSERT_EQUAL_DOUBLE` 相同的相等规则: 如果两个值在预期值的微小百分比 delta 内,断言将通过。 ### 字符串断言 ``` TEST_ASSERT_EQUAL_STRING(expected, actual) ``` 比较两个以空字符结尾的字符串。 如果任何字符不同或长度不同,则失败。 ``` TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len) ``` 比较两个字符串。 如果任何字符不同,则失败,在比较 len 个字符后停止比较。 ``` TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message) ``` 比较两个以空字符结尾的字符串。 如果任何字符不同或长度不同,则失败。 失败时输出自定义消息。 ``` TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message) ``` 比较两个字符串。 如果任何字符不同,则失败,在比较 len 个字符后停止比较。 失败时输出自定义消息。 ### 指针断言 大多数指针操作可以通过简单地使用上面的整数比较来执行。 但是,为了清晰起见,添加了几个特殊情况。 ``` TEST_ASSERT_NULL(pointer) ``` 如果指针不等于 NULL 则失败 ``` TEST_ASSERT_NOT_NULL(pointer) ``` 如果指针等于 NULL 则失败 ### 内存断言 ``` TEST_ASSERT_EQUAL_MEMORY(expected, actual, len) ``` 比较两个内存块。 对于无法强制转换为标准类型的类型,这是一个很好的通用断言…… 但由于这是内存比较,您必须小心确保您的数据类型是打包的。 ### _MESSAGE 您可以将 `\_MESSAGE` 附加到任何宏,使它们接受一个额外的参数。 此参数是一个字符串,将打印在失败字符串的末尾。 这对于指定有关问题的更多信息很有用。
标签:Bash脚本, CMake, DNS解析, Make, TDD, ThrowTheSwitch, Unity Test, 单元测试, 单片机, 客户端加密, 嵌入式开发, 嵌入式系统, 开源项目, 微控制器, 断言库, 测试框架, 测试驱动开发, 集成测试