首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么VScode PlatformIO单元测试不能在头文件中使用函数声明?

为什么VScode PlatformIO单元测试不能在头文件中使用函数声明?
EN

Stack Overflow用户
提问于 2022-04-04 12:59:00
回答 1查看 168关注 0票数 1

VScode PlatformIO单元测试不能在头文件中使用函数声明,但使用函数定义代码是工作的。它显示了对“`wifiInit()”的未定义的引用

代码语言:javascript
复制
#include <unity.h>

#include "wifi/wifi.h"

void test_unit() {
    TEST_ASSERT_EQUAL(EXIT_SUCCESS,wifiInit());
}

void setup() {
    delay(2000);
    UNITY_BEGIN(); 
    RUN_TEST(test_unit);
}

void loop() {}
代码语言:javascript
复制
#include <Arduino.h>
#include <WiFi.h>

#ifndef __wifi_init_h_
#define __wifi_init_h_

#define WIFI_SSID "**"
#define WIFI_PASSWD "***"

int wifiInit();
#endif
代码语言:javascript
复制
#include "wifi/wifi.h"

int wifiInit() {
    // 设置ESP32通过WIFI连接网络
    WiFi.begin(WIFI_SSID, WIFI_PASSWD);
    WiFi.config(WiFi.localIP(), WiFi.gatewayIP(), WiFi.subnetMask(), (uint32_t)0xDF050505, (uint32_t)0x72727272);
    // 打印连接状态
    Serial.println("Connecting");
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.print("\nIP address: ");
    Serial.println(WiFi.localIP());
    return EXIT_SUCCESS;
}
}

我把wifi.cpp中的wifiInit()交给wifi.h,它起作用了。

EN

回答 1

Stack Overflow用户

发布于 2022-06-03 01:12:05

这是因为单元测试默认不生成源文件,因此链接器在链接时找不到wifiInit的定义(wifiInit)(只有声明,.h),一种修复方法是告诉PlatformIO在运行单元测试时生成源文件:https://docs.platformio.org/en/latest/projectconf/section_env_test.html#test-build-src

代码语言:javascript
复制
[env:myenv]
platform = ...
test_build_src = yes

但是要小心,取决于您的测试环境,您可能无法访问特定于平台的标头/库!也就是说,在native单元测试构建中,您将无法在源文件中创建#include <Arduino>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71737672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档