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

码
#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() {}#include <Arduino.h>
#include <WiFi.h>
#ifndef __wifi_init_h_
#define __wifi_init_h_
#define WIFI_SSID "**"
#define WIFI_PASSWD "***"
int wifiInit();
#endif#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,它起作用了。
发布于 2022-06-03 01:12:05
这是因为单元测试默认不生成源文件,因此链接器在链接时找不到wifiInit的定义(wifiInit)(只有声明,.h),一种修复方法是告诉PlatformIO在运行单元测试时生成源文件:https://docs.platformio.org/en/latest/projectconf/section_env_test.html#test-build-src。
[env:myenv]
platform = ...
test_build_src = yes但是要小心,取决于您的测试环境,您可能无法访问特定于平台的标头/库!也就是说,在native单元测试构建中,您将无法在源文件中创建#include <Arduino>。
https://stackoverflow.com/questions/71737672
复制相似问题