gpt4 book ai didi

c++ - 如何对嵌入式代码进行单元测试?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:01 24 4
gpt4 key购买 nike

我正在使用 C++ 为基于 Cortex-M4 的微 Controller 开发软件。我有很多高度依赖机器的代码(驱动程序等)。而且我有更高级别的代码,它通过直接使用驱动程序密切依赖于低级代码。示例:低级部分是例如。一个非常特定于硬件的UART驱动程序,高层部分是一个基于UART的通信协议(protocol)。 (该软件在“裸机”上运行,即底层没有操作系统。)

这段代码目前是紧耦合的,因此不可单元测试。
我想让它可以测试。

所以我想我会创建低级部分的抽象,并使高级部分仅依赖于抽象。然后我可以创建将由单元测试使用的抽象模拟,以及将在微 Controller 上运行的真实实现。

  • 这是正确的方法吗?
  • 如何创建这样的抽象?
    大多数sources I've found强烈反对在嵌入式系统中使用继承和 virtual 函数。还有哪些其他方式?

因此,总而言之,我想创建一个硬件抽象层 (HAL),但我想问的是该怎么做?我应该在 C++ 中使用 virtual 继承,还是有其他更好的方法?

最佳答案

对于 C++,我建议使用一个接口(interface),比如说我们有一个 HAL.hpp,我们可以在其中定义我们想要实现的纯虚函数:

class HAL
{
virtual void func1() = 0;
virtual void func2() = 0;
};

然后你可以让你的 Mock.cpp 实现它,你可以让 Real.cpp 实现同样的东西:

Mock.cpp:
class Mock : HAL
{
virtual void func1(){ }
virtual void func2(){ }
}

现在另一种方法是在 HAL.h 中定义您的函数,但不在此处提供实现:

void func1();
void func2();

然后您创建一个 HAL.cpp 并在其中添加您希望在目标上看到的功能。将所有这些创建为名为 HAL 的库。将此库链接到您的主项目。

现在进行模拟和测试。为您的测试创建一个单独的项目。添加要测试的源,但不要链接 HAL 库。而是创建另一个源文件 Mock.cpp 包含 HAL.h 并为其提供实现。这样,将调用 Mock 的实现,而不是 HAL 库中的功能。

关于c++ - 如何对嵌入式代码进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45195006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com