gpt4 book ai didi

c - 一般单元测试 : possible to mock self functions? (ceedling/CMock)

转载 作者:行者123 更新时间:2023-11-30 14:36:23 24 4
gpt4 key购买 nike

是否基本上可以模拟要测试的文件的功能?

例如我想测试由这些函数组成的文件 self_test.c:

#include "self_test.h"

uint8_t function_1(uint8_t argument)
{
return function_2(argument);
}

uint8_t function_2(uint8_t argument)
{
return (argument+1);
}

测试文件主要如下所示:

#include "mock_self_test.h"

void test_function_1(void)
{
uint8_t input_value = 8;
stest_function_2_ExpectAndReturn(input_value, 10);
uint8_t output_value = function_1(input_value);
TEST_ASSERT_EQUAL_UINT8(10, output_value);
}

为了完成 self_test.h 文件:

uint8_t function_1(uint8_t argument);
uint8_t function_2(uint8_t argument);

当我这样做时,编译器返回:“错误:Function function_1。调用次数超出预期。”

我认为这是不好的做法,可能不起作用,但由于我的 function_2 相当大,这可以节省我大量的工作,因为我可以独立于 function_2 测试 function_1。而且我正在处理遗留代码,因此不幸的是,用更好的测试界面重写所有内容并不是一个选择。

种子产量:

[==========] Running 1 tests from 1 test cases.
[----------] Global test environment set-up.
[----------] 1 tests from test_self_test.c
[ RUN ] test_self_test.c.test_function_1
test_self_test.c(22): error: Function function_1. Called more times than expected.
Actual: FALSE
Expected: TRUE
[ FAILED ] test_self_test.c.test_function_1 (0 ms)
[----------] 1 tests from test_self_test.c (0 ms total)

最佳答案

不,您不能模拟从同一编译单元调用的函数。大多数编译器不会将对被调用函数的符号的引用,而是将直接(可重定位)地址或偏移量放入生成的机器代码中。如果可能的话,他们甚至可以优化调用。

您可以将源文件切成更小的文件,这也将是一项繁重的工作。您可以尝试通过脚本自动执行此操作。

显然要测试的项目的软件设计很糟糕。 ;-)

关于c - 一般单元测试 : possible to mock self functions? (ceedling/CMock),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58095755/

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