【发布时间】:2022-02-04 08:55:17
【问题描述】:
您好,我正在使用 platformio 环境为 ESP32 开发 C 项目。 我正在使用 platformio env 提供的统一测试框架。 我想对以下函数进行单元测试
float reading_board_temp(void)
{
uint32_t adc_reading = 0;
float board_temp = 0;
for (int i = 0; i < NO_OF_SAMPLES; i++)
{
adc_reading += adc1_get_raw((adc1_channel_t)adc_1_ch_board_temp);
vTaskDelay(TEN_TICKS_DELAY);
}
adc_reading /= NO_OF_SAMPLES;
uint32_t voltage = esp_adc_cal_raw_to_voltage(adc_reading, adc_chars_board_temp);
board_temp = (voltage - MCP9700AT_OFFSET)/TEMP_DIVIDER;
return board_temp;
}
这是我一直在platformio中创建的测试文件
#include <Arduino.h>
#include <unity.h>
#include <gpioa_module.h>
void test_board_temp()
{
float expected_temp = 35;
float risult_reading = 0;
risult_reading = reading_board_temp ();
TEST_ASSERT_EQUAL(expected_temp, risult_reading);
}
void setUp(void)
{
}
void tearDown(void)
{
}
void setup()
{
// NOTE!!! Wait for >2 secs
// if board doesn't support software reset via Serial.DTR/RTS
delay(2000);
UNITY_BEGIN();
RUN_TEST(test_board_temp);
RUN_TEST(test_example2);
UNITY_END();
}
void loop()
{
}
当我尝试在 esp32 中进行测试时,它似乎冻结了。
如何测试删除或伪造硬件依赖项的功能?
非常感谢您的热情回复。
【问题讨论】:
-
只在评论中回答,因为我不知道你的硬件平台及其库。 C 不允许像我们在 Java 程序中使用的那样使用简单的 mocks。我年轻时所做的是构建一个与硬件具有相同功能的存根库(但硬编码响应......),然后我将测试应用程序与那个存根库链接起来。不确定它是否与您的实际用例相关...
-
同意@SergeBallesta——你想用非常具体的输入来测试那个函数——试图在附加硬件的情况下产生那个会出现问题,除非你可以在某种模拟模式下激发特定的值(这是相当不太可能...)。
-
顺便说一下,如果您更喜欢商业四舍五入,您可以改用
adc_reading = (adc_reading + NO_OF_SAMPLES / 2) / NO_OF_SAMPLES;...
标签: c++ unit-testing esp32 platformio