测试驱动的嵌入式开发 002:VSCode + CMake + Unity 环境搭建

这篇具有很好参考价值的文章主要介绍了测试驱动的嵌入式开发 002:VSCode + CMake + Unity 环境搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文是对《测试驱动的嵌入式 C 语言开发》第二章的实践。

搭建 VSCode

这部分参考博文《基于Windows 的 VS Code C/C++ 编译环境搭建》。

安装 CMake

安装 CMake ,在官网下载最新安装包。安装时选择对所有用户添加 CMake 到系统 PATH

安装 VSCode 插件

安装以下插件:

  • CMake:VSCode 的 CMake 语言支持插件
  • CMake Tools:对插件 CMake 的扩展支持

下载 Unity

Unity 是一个单元测试框架。目标是保持它的小而实用。Unity 测试框架的核心是三个文件:一个 C 文件和几个头文件。
这些组合起来提供功能和宏以使测试更容易。

Unity 被设计为跨平台的。
它努力坚持 C 标准,同时仍为许多违反规则的嵌入式 C 编译器提供支持。
Unity 已与许多编译器一起使用,包括 GCC、IAR、Clang、Green Hills、Microchip 和 MS Visual Studio。

可在在Github拉取或下载源代码。

使用 Unity

  1. 创建一个文件夹,这里命名为 TDDUnityExample
    文件夹内保存你的项目源文件、Unity 测试框架源文件、测试用例等,而现在,它只是一个空文件夹
  2. TDDUnityExample 文件夹下再创建一个文件夹,这里命名为 Unity
    这个文件夹内存放 Unity 测试框架源文件:在从下载的 Unity源码中将 srcextras 两个文件夹拷贝到 Unity 文件夹下。
  3. TDDUnityExample 文件夹下再创建一个文件夹,这里命名为 tests
    这个文件夹内存放所有测试用例。我们以测试 sprintf_s 函数为例。
    在这个文件夹中创建 sprintf_s_test.csprintf_s_runner.call_test.c 三个文件。其中, sprintf_s_test.c 内容为:
#include <stdio.h>
#include "unity_fixture.h"

TEST_GROUP(sprintf);

TEST_SETUP(sprintf)
{}

TEST_TEAR_DOWN(sprintf)
{}

TEST(sprintf, NoFormatOperations)
{
    char output[5];

    TEST_ASSERT_EQUAL(4 , sprintf_s(output,4, "hey"));
    TEST_ASSERT_EQUAL_STRING("hey", output);
}

TEST(sprintf, FormatOperations)
{
    char output[20];
    TEST_ASSERT_EQUAL(12, sprintf_s(output, 20, "Hello %s\n", "World"));
}

sprintf_s_runner.c 内容为:

#include "unity_fixture.h"

TEST_GROUP_RUNNER(sprintf)
{
    RUN_TEST_CASE(sprintf, NoFormatOperations);
    RUN_TEST_CASE(sprintf, FormatOperations);
}

all_test.c 内容为:

#include "unity_fixture.h"

static void RunAllTests(void)
{
    RUN_TEST_GROUP(sprintf);
}

int main(int argc, const char *argv[])
{
    return UnityMain(argc, argv, RunAllTests);
}
  1. TDDUnityExample 文件夹下创建名为 CMakeLists.txt 的文件,该文件给 CMake使用,文件内容为:
# 最低CMake版本要求
cmake_minimum_required(VERSION 3.5.1)

#将src工作目录的绝对路径赋给SRC_DIR
file(GLOB_RECURSE APP_SRC_DIR "tests/*.c")
file(GLOB_RECURSE UNITY_SRC_LIST "Unity/*.c")

# 项目名称
project(TDD_test)

# 头文件路径
include_directories("tests")
include_directories("Unity/src")
include_directories("Unity/extras/fixture/src")
include_directories("Unity/extras/memory/src")

#将所有源文件生成一个可执行文件
add_executable(TDD_test  ${APP_SRC_DIR} ${UNITY_SRC_LIST})
  1. 使用 VSCode 打开 TDDCppUTestExample 文件夹。单击下图所示红框中的三角形。
    测试驱动的嵌入式开发 002:VSCode + CMake + Unity 环境搭建
    第一次执行会弹出选择编译套件的选项,这里选择 GCC
    测试驱动的嵌入式开发 002:VSCode + CMake + Unity 环境搭建
    选择完毕,VSCode 会调用 CMake 根据 CMakeLists.txt 文件内容生成 Makefile 文件,然后调用指定编译器完成源代码编译,如果生成可执行文件,则执行可执行文件。 Makefile 文件以及编译生成文件会保存在 TDDUnityExample 文件夹下的 build 文件夹下,该文件夹由 VSCode 自动创建。
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_C_COMPILER:FILEPATH=C:\msys64\mingw64\bin\gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=C:\msys64\mingw64\bin\g++.exe -Sc:/Users/jssh/Desktop/TDDUnityExample -Bc:/Users/jssh/Desktop/TDDUnityExample/build -G "Unix Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- The C compiler identification is GNU 12.2.0
[cmake] -- The CXX compiler identification is GNU 12.2.0
[cmake] -- Detecting C compiler ABI info
[cmake] -- Detecting C compiler ABI info - done
[cmake] -- Check for working C compiler: C:/msys64/mingw64/bin/gcc.exe - skipped
[cmake] -- Detecting C compile features
[cmake] -- Detecting C compile features - done
[cmake] -- Detecting CXX compiler ABI info
[cmake] -- Detecting CXX compiler ABI info - done
[cmake] -- Check for working CXX compiler: C:/msys64/mingw64/bin/g++.exe - skipped
[cmake] -- Detecting CXX compile features
[cmake] -- Detecting CXX compile features - done
[cmake] -- Configuring done
[cmake] -- Generating done
[cmake] -- Build files have been written to: C:/Users/jssh/Desktop/TDDUnityExample/build
[main] Building folder: TDDUnityExample TDD_test
[build] Starting build
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/Users/jssh/Desktop/TDDUnityExample/build --config Debug --target TDD_test -j 14 --
[build] [ 14%] [32mBuilding C object CMakeFiles/TDD_test.dir/tests/sprintf_s_runner.c.obj[0m
[build] [ 42%] [32mBuilding C object CMakeFiles/TDD_test.dir/tests/sprintf_s_test.c.obj[0m
[build] [ 42%] [32mBuilding C object CMakeFiles/TDD_test.dir/tests/all_teses.c.obj[0m
[build] [ 71%] [32mBuilding C object CMakeFiles/TDD_test.dir/Unity/extras/memory/src/unity_memory.c.obj[0m
[build] [ 71%] [32mBuilding C object CMakeFiles/TDD_test.dir/Unity/extras/fixture/src/unity_fixture.c.obj[0m
[build] [ 85%] [32mBuilding C object CMakeFiles/TDD_test.dir/Unity/src/unity.c.obj[0m
[build] [100%] [32m[1mLinking C executable TDD_test.exe[0m
[build] [100%] Built target TDD_test
[build] Build finished with exit code 0
  1. 终端 界面中,可以看到程序执行结果,也就是测试输出结果。
    测试驱动的嵌入式开发 002:VSCode + CMake + Unity 环境搭建

结束语

如果你想使用测试驱动开发,又对本文举例内容疑惑,可能是因为你还没看过《测试驱动的嵌入式 C 语言开发》这本书。
不要被书名欺骗到,这绝不仅仅只是教授你测试驱动方法的,它还教授 C 程序设计模式,如何改善设计、如何写出干净利索的代码,如何封装和模块化等等。

另外,本书是这么多年来我看过的嵌入式翻译书籍中,翻译最准确最清晰的一本。一股清流,值得大书特书。





读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
测试驱动的嵌入式开发 002:VSCode + CMake + Unity 环境搭建


文章来源地址https://www.toymoban.com/news/detail-417072.html

到了这里,关于测试驱动的嵌入式开发 002:VSCode + CMake + Unity 环境搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式内核及驱动开发高级

    仅devfs,导致开发不方便以及一些功能难以支持: 热插拔 不支持一些针对所有设备的统一操作(如电源管理) 不能自动mknod 用户查看不了设备信息 设备信息硬编码,导致驱动代码通用性差,即没有分离设备和驱动 uevent机制:sysfs + uevent + udevd(上层app) sysfs用途:(类似于

    2024年02月16日
    浏览(65)
  • 嵌入式LinuxLED驱动开发实验

    我们在裸机实验的时候,都是通过配置底层的寄存器来进行点亮LED灯的操作的。我们现在还没有学习到设备树的相关知识,所以,我们也是通过在字符设备驱动框架的基础上来配置底层寄存器来实现LED灯的点亮,但是,与之前不同的是,在Linux系统中会存在地址映射的方式,

    2024年02月15日
    浏览(57)
  • 全志V3S嵌入式驱动开发(驱动开发准备)

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         之前的文章都是教大家怎么搭建环境、看原理图、编译内核和根文件系统、做镜像,直到现在才进入驱动开发的主题。 毕竟整个专栏的目的,还是希望大家能够学会驱动外部硬件。

    2024年02月13日
    浏览(65)
  • 嵌入式Linux驱动开发之点灯

      使用驱动开发的方式点亮一个LED灯。看看两者有啥区别不? 首先查看原理图,看看我们的板子上的LED等接在哪一个IO口上面。 好了,看原理图我们知道LED灯接在芯片的GPIO1的第三个引脚上面,也就是GPIO1_IO03。 先掌握三个名词 CCM: Clock Controller Module (时钟控制模块) IOMUXC : I

    2024年02月01日
    浏览(101)
  • 嵌入式Linux开发-USB驱动

    哥们马上就要被裁了,总得整理一下技术方面的积累,准备开始下一轮的面试和找工作之旅了。。。。 通用串行总线(USB)是主机和外围设备之间的一种连接。 从拓扑上来看,是一颗由几个点对点的连接构建而成的树。这些连接是连接设备和集线器(hub)的四线电缆(底线、电源线

    2024年02月20日
    浏览(73)
  • 嵌入式:驱动开发 Day4

    驱动程序:myled.c 应用程序:test.c 头文件:head.h

    2024年02月09日
    浏览(52)
  • 嵌入式驱动开发需要会哪些技能?

    嵌入式驱动开发是指在嵌入式系统中编写驱动程序,实现设备与计算机之间的通信。嵌入式驱动开发是指编写设备驱动程序,实现设备与计算机之间的通信。 以下是一些嵌入式驱动开发的具体操作方法:  1)了解硬件设备结构: 在进行嵌入式驱动开发之前,需要对所使用的硬

    2024年01月25日
    浏览(59)
  • 嵌入式Linux驱动开发 04:基于设备树的驱动开发

    前面文章 《嵌入式Linux驱动开发 03:平台(platform)总线驱动模型》 引入了资源和驱动分离的概念,这篇文章将在前面基础上更进一步,引入设备树的概念。 在平台总线驱动模型中资源和驱动已经从逻辑上和代码组织上进行了分离,但每次调整资源还是会涉及到内核,所以现

    2024年02月16日
    浏览(70)
  • 【嵌入式Linux驱动】驱动开发调试相关的关系记录

    https://www.processon.com/mindmap/64537772b546c76a2f37bd2f

    2024年02月02日
    浏览(56)
  • 嵌入式Linux驱动开发——常见框架梳理

    本文主要介绍了Linux驱动开发中一些常用的驱动框架,platform、input、iic、spi等,硬件平台使用的是正点原子的imx6ull开发板。 不管什么框架最后都是要追溯到配置IO的电气属性和复用功能 如果要使用外部中断,设备树节点中还需添加相关信息,什么边沿触发 1:module_init和mod

    2024年02月15日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包