ThrowTheSwitch/Unity
GitHub: ThrowTheSwitch/Unity
专为嵌入式 C 语言设计的轻量级单元测试框架,核心极简且提供丰富的断言库,适配各种微控制器架构。
Stars: 5083 | Forks: 1096
# Unity 测试 
__版权所有 (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, 单元测试, 单片机, 客户端加密, 嵌入式开发, 嵌入式系统, 开源项目, 微控制器, 断言库, 测试框架, 测试驱动开发, 集成测试