首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用单元测试:可以模拟自我函数吗?(割让/CMock)

通用单元测试:可以模拟自我函数吗?(割让/CMock)
EN

Stack Overflow用户
提问于 2019-09-25 17:55:16
回答 1查看 352关注 0票数 0

原则上可以模拟待测试文件的功能吗?

例如,我想测试由以下函数组成的文件self_test.c:

代码语言:javascript
复制
#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);
}

测试文件主要如下所示:

代码语言:javascript
复制
#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文件:

代码语言:javascript
复制
uint8_t function_1(uint8_t argument);
uint8_t function_2(uint8_t argument);

当我这样做时,编译器返回:"error: Function function_1。调用次数超过预期。“

我认为这是一种糟糕的做法,可能不起作用,但由于我的function_2相当大,这可以节省我大量的工作,因为我可以独立于function_2测试function_1,而且我正在处理遗留代码,所以不幸的是,用更好的测试接口重写一切都不是一个好的选择。

Ceedling输出:

代码语言:javascript
复制
[==========] 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)
EN

回答 1

Stack Overflow用户

发布于 2019-09-26 00:30:00

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

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

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

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

https://stackoverflow.com/questions/58095755

复制
相关文章

相似问题

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