【问题标题】:Gtest for microcontroller: <avr/io.h> include error微控制器的 Gtest:<avr/io.h> 包含错误
【发布时间】:2021-11-01 16:07:11
【问题描述】:

我已启动并运行 gtest,并确认它适用于两个测试项目。

现在我尝试将我为 ATXMEGA128d4 编写的项目中的一部分包括在内。 如果我通过以下方式将我的代码包含在我的 gtest_test 文件中:

extern "C" {
#include "C:\User\my_workspace\active_development\uC_Project\myCode.h"
}

尝试构建测试代码时出现错误:错误是:

C:\User\my_workspace\active_development\uC_Project\Hardware.h(23): 
fatal error C1083: File (Include) cannot be opened: "avr/io.h": No such file or directory
Target //:uC_Project_test failed to build

因此,任何包含“avr/io.h”标头的包含文件都会导致问题,因为 gtest 无法找到“io.h”,这实际上是有道理的,因为 io.h 并不真正存在。
由于该项目是使用 Microchip Studio 开发的,因此您应该使用:

#include <avr/io.h>

这会告诉项目 IO 引脚和其他设备特定的详细信息。
由于 IDE 知道它的 ATXMEGA128d4,IDE 知道所需的 io.h 文件是“iox128d4.h”,它位于 Microchip Studio 的路径中,并以某种方式与项目通信,我的猜测是通过 make 文件。

我尝试将所有 替换为确切的“iox128d4.h”文件的路径,但随后项目拒绝构建,并出现错误消息“include 而不是文件“...”

我现在的问题是: 如何在不更改原始项目的情况下让 gtest 知道要使用哪些包含文件。如果我能以某种方式告诉项目使用“iox128d4”而不是 它应该可以工作。也许这可以通过 gtest makefile 实现?我是 makefile 的绝对初学者,所以我什至不知道从哪里开始。

任何帮助或提示将不胜感激。

【问题讨论】:

    标签: c++ c makefile microcontroller googletest


    【解决方案1】:

    如果您真的不想修改原始代码,则必须为 io.h 创建一个模拟头文件并将其包含在您的测试项目中。这意味着您必须在模拟文件中为实际项目中使用的每个函数、变量和定义包含一个定义和实现。实现可以只是一个空函数或返回/设置一个默认值。您可以查看 gmock 以获得灵感。

    或者,您可以考虑构建项目,以便您需要进行单元测试的部分不依赖于任何特定的硬件。由于这些,您不太可能在开发 PC 或构建服务器上进行测试。这是假设您不会在您的 mcu 上运行 gtest。

    【讨论】:

    • 我在我的 gtest 文件夹中创建了一个名为 avr 的额外文件夹,并包含了一个包含 iox128d4 内容的文件 io.h。这部分现在可以使用 gtest 成功构建。还有一些其他问题,所以我不能完全确认这是否解决了所有问题,但我可以非常有信心。谢谢。
    • @uC_dev_imposter 是的,我可以想象这在第一次是行不通的。模拟硬件可能很广泛,但一旦你得到它,测试就会容易得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多