当前位置: 首页 > news >正文

太原网站建设外包cms网站源码

太原网站建设外包,cms网站源码,章贡区网站建设,wordpress增加页面分类概述 Unity Test是一个为C构建的单元测试框架。本文基于STM32F407为基础#xff0c;完全使用STM32CubeIDE进行开发#xff0c;移植和简单使用Unity。 单片机型号#xff1a;STM32F407VET6 软件#xff1a;STM32CubeIDE Version: 1.14.1 Unity Version#xff1a;2.… 概述 Unity Test是一个为C构建的单元测试框架。本文基于STM32F407为基础完全使用STM32CubeIDE进行开发移植和简单使用Unity。 单片机型号STM32F407VET6 软件STM32CubeIDE  Version: 1.14.1    Unity Version2.6.0 一、配置stm32工程 新建工程选择407芯片生成工程后开始配置硬件这里我们只使用了串口1作为打印输出串口按照图片设置波特率等根据需要设置这里我使用的默认值。 我习惯单独生成c和h文件。 保存生成代码。 在main.c文件中添加串口重定向函数 /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ int __io_putchar(int ch) {/* Implementation of __io_putchar *//* e.g. write a character to the UART1 and Loop until the end of transmission */HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, 0xFFFFFFFF);return ch; } int __io_getchar(void) {/* Implementation of __io_getchar */char rxChar;// This loops in case of HAL timeout, but if an ok or error occurs, we continuewhile (HAL_UART_Receive(huart1, (uint8_t *)rxChar, 1, 0xFFFFFFFF) HAL_TIMEOUT);return rxChar; } /* USER CODE END 0 */ 此时理论上可以编译通过并且printf好用。 二、下载unity源码 GitHub - ThrowTheSwitch/Unity: Simple Unit Testing for C 源码地址如上。 在工程根路径下创建Unity文件夹并将unity源码中的src文件夹中的文件放到这个目录中。并将example文件夹中的unity_config.h也放到目录中。 在工程中右键并刷新 这时就会看到我们添加的文件夹了。 在工程上右键Properties如下图步骤添加unity到includes目录中。 如上图添加源文件到工程中参与编译。 此时就可以编译了可以正常编译通过。 这里说一下配置文件unity_config.h如果使用的是stm32的cube那么这个文件什么都不用写如果使用的是其他mcu或者编译器需要详细阅读并进行相关的宏定义。 三、测试程序 下面我先简单翻译一下github上的readme。 基本有效性测试 TEST_ASSERT_TRUE(condition) 如果条件结果为 false则失败 TEST_ASSERT_FALSE(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) 比较两个整数是否相等并将错误显示为十六进制。与其他整数比较一样您可以指定大小。。。这里的大小也将影响所示出的半字节的数量例如将示出4个半字节。 TEST_ASSERT_EQUAL(expected, actual) 另一种TEST_ASSERT_EQUAL_INT的方式 TEST_ASSERT_INT_WITHIN(delta, expected, actual) 断言实际值在预期值的正负增量范围内。 这也具有特定尺寸的变体。 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) 断言实际值在预期值的正负增量范围内。 TEST_ASSERT_FLOAT_NOT_WITHIN(delta, expected, actual) TEST_ASSERT_DOUBLE_NOT_WITHIN(delta, expected, actual) 断言实际值不在预期值的正负增量范围内。 TEST_ASSERT_EQUAL_FLOAT(expected, actual) TEST_ASSERT_EQUAL_DOUBLE(expected, actual) 断言两个浮点值在预期值的一小部分 % 增量内“相等”。 TEST_ASSERT_NOT_EQUAL_FLOAT(expected, actual) TEST_ASSERT_NOT_EQUAL_DOUBLE(expected, actual) 断言两个浮点值在期望值的一小部分 % 增量内不“相等”。 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_EQUALGREATER_OR_EQUALTEST_ASSERT_EQUAL_FLOATTEST_ASSERT_EQUAL_DOUBLE 字符串断言 TEST_ASSERT_EQUAL_STRING(expected, actual) 比较两个以 null 结尾的字符串。 如果任何字符不同或长度不同则失败。 TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len) 比较两个字符串。 如果任何字符不同则失败在 len 字符之后停止比较。 TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message) 比较两个以 null 结尾的字符串。 如果任何字符不同或长度不同则失败。 失败时输出自定义消息。 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) 比较两个内存块。 对于不能被强制执行为标准类型的类型来说这是一个很好的通用断言...... 但是由于它是内存比较因此您必须小心数据类型被封装。 我们在工程Unity文件夹中创建test_unity.c文件用于填写unity测试程序我们先定义测试函数 /** test_unity.c** Created on: Feb 14, 2024* Author: Administrator*/#include unity.hvoid test_unity(void) {} 并且将void test_unity(void)函数添加到main.h中 /* USER CODE BEGIN EFP */ void test_unity(void); /* USER CODE END EFP */ 然后在main.c中调用 test_unity函数。 /* USER CODE BEGIN 2 */test_unity();/* USER CODE END 2 */这时候编译是可以通过的。 我们接下来开始编写测试函数。 /** test_unity.c** Created on: Feb 14, 2024* Author: Administrator*/#include unity.h #include stdio.h #include stdbool.hbool IsTrue(bool in) {return in; }void testFunc(void) {TEST_ASSERT_TRUE(IsTrue(true));TEST_ASSERT_TRUE(IsTrue(false)); }void test_unity(void) {printf(\r\n*****hello unity*******\r\n);RUN_TEST(testFunc);UNITY_END(); }这个时候再编译就会报错 因为我们有两个函数未实现 /** test_unity.c** Created on: Feb 14, 2024* Author: Administrator*/#include unity.h #include stdio.h #include stdbool.hvoid setUp(void) { }void tearDown(void) { }bool IsTrue(bool in) {return in; }void testFunc(void) {TEST_ASSERT_TRUE(IsTrue(true));TEST_ASSERT_TRUE(IsTrue(false)); }void test_unity(void) {printf(\r\n*****hello unity*******\r\n);RUN_TEST(testFunc);UNITY_END(); }这时候我们就可以编译过了。 用例的初始化setUp() 用例的释放tearDown() 这俩分别是在每个case之前和之后都会运行一次。 setUp() 方法用于用例的初始化比如在执行测试用例之前进行的变量定义、初始化等。 tearDown() 方法则用于用例的释放比如测试后的清理工作比如数据还原、资源释放等。 运行输出如下 符合预期我们再写几个完善一下测试程序。 /** test_unity.c** Created on: Feb 14, 2024* Author: Administrator*/#include unity.h #include stdio.h #include stdbool.hvoid setUp(void) { }void tearDown(void) { }bool IsTrue(bool in) {return in; }void testBoolPassFunc(void) {TEST_ASSERT_TRUE(IsTrue(true)); }void testBoolFailFunc(void) {TEST_ASSERT_TRUE(IsTrue(false)); }void testIntFunc(void) {TEST_ASSERT_EQUAL_INT(1,1);uint8_t v 10;TEST_ASSERT_EQUAL_INT(10, v); }void testArrayPassFunc(void) {uint8_t a[3] {1,2,3};uint8_t b[3] {1,2,3};TEST_ASSERT_EQUAL_HEX8_ARRAY(a, b, 3); }void testArrayFailFunc(void) {uint8_t a[3] {1,2,3};uint8_t b[3] {1,2,4};TEST_ASSERT_EQUAL_HEX8_ARRAY(a, b, 3); }void testBitsFunc(void) {TEST_ASSERT_BITS(0xF0, 0x35, 0x34); }void testFloatPassFunc(void) {// 这些断言验证actual参数处于expected参数的/-delta之间。TEST_ASSERT_FLOAT_WITHIN(0.4, 1.2, 1.5); }void testFloatFailFunc(void) {// 这些断言验证actual参数处于expected参数的/-delta之间。TEST_ASSERT_FLOAT_WITHIN(0.2, 1.2, 1.5); }void testStringFunc(void) {char *s hello unity;TEST_ASSERT_EQUAL_STRING(s, hello unity); }void testStringMessageFunc(void) {char *s hello unity;TEST_ASSERT_EQUAL_STRING_MESSAGE(s, hello unity!, Im a message!); }void test_unity(void) {printf(\r\n*****hello unity*******\r\n);RUN_TEST(testBoolPassFunc);RUN_TEST(testBoolFailFunc);RUN_TEST(testIntFunc);RUN_TEST(testArrayPassFunc);RUN_TEST(testArrayFailFunc);RUN_TEST(testBitsFunc);RUN_TEST(testFloatPassFunc);RUN_TEST(testFloatFailFunc);RUN_TEST(testStringFunc);RUN_TEST(testStringMessageFunc);UNITY_END(); }当我们把失败的case都去掉后。
http://www.zqtcl.cn/news/599885/

相关文章:

  • 优秀电商设计网站有哪些微博网站可以做兼职吗
  • 网站建设 验证码电子商务网站建设流程图
  • 做内贸什么网站资源比较多岳阳网上房地产
  • 去国外网站开发客户中的contact us 没有邮箱失败营销案例100例
  • 网站怎么做图片动态图片大全靖江 建设局网站
  • 汉子由来 外国人做的网站wordpress微信小程序部署
  • 兰州网站建设最新招聘信息江苏网站建设简介模板
  • 最具口碑的企业网站建设企业做网站的流程
  • wordpress多语言企业网站网页制作工具按其制作方式有几种类型
  • 2019年做网站还有机会吗wordpress 虚拟订阅插件
  • 网站都有后台吗怀柔网站建设
  • phpcms 图片网站免费商城网站建设
  • 网站虚拟主机租用中铁建设门户网登录初始密码
  • 网站哪个公司做的好网站建设与管理指什么软件
  • 提升学历要多少钱seo关键字优化技巧
  • 代理会计公司网站模版哪家培训机构学校好
  • 开江建设局网站怎么做让自己的网站
  • 个人建设网站要钱吗专门用来制作网页的软件是什么
  • 关键词挖掘站网seo点击软件手机
  • 建设局考试通知文件网站推广普通话的手抄报
  • 移动端网站排名海淀区seo引擎优化多少钱
  • 福田网站建设联系电话免费开商城网站吗
  • 网站备案本人承诺备案 网站建设方案书
  • 图片网站模板wordpress首页模板文件
  • 做外国网站怎么买空间网站策划方案ppt
  • 网站建设全网推广小程序外贸网站建设980
  • 具有营销价值好的网站常德农科院网站
  • 网站域名如何起男女直接做的视频上那个网站
  • 免费创建手机网站上海网站设计建设
  • 校园网站建设招标公告网站开发常用问题