gpt4 book ai didi

Cmock 无法识别函数调用

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:05 25 4
gpt4 key购买 nike

我是 Cmock 的新手,这是一个 C 中的模拟框架,正在尝试开始使用它。我采用了 exmaples 目录中提供的“make_example”并对其进行了一些修改。我的代码出现在下面:

/////////////////////////// foo.c ///////////////////////////
#include "foo.h"

int foo_init(int number)
{
return 0;
}

int func_using_foo_init(int number)
{
int ret = -1;

ret = foo_init(number);
return ret;
}
//////////////////////////////////////////////////////

/////////////////////////// test_main.c ///////////////////////////

#include "unity.h"
#include "mock_foo.h"

void setUp(void)
{
}

void tearDown(void)
{
}

void test_main_should_initialize_foo(void)
{
int ret = -1;
foo_init_ExpectAndReturn(1, 0);

ret = func_using_foo_init(1);
TEST_ASSERT_FALSE(ret);
}
//////////////////////////////////////////////////////

运行显示的测试时,出现下一个错误:失败:函数 func_using_foo_init。调用次数超过预期。

此外,如果我添加对 func_using_foo_init_ExpectAndReturn 的调用,我会收到下一个错误:函数 foo_init。调用次数少于预期。

似乎无法识别函数调用..任何帮助将不胜感激!利亚德

最佳答案

mock 是生成的代码,与您正在模拟的函数具有相同的函数签名。结果是您无法在同一个测试可执行文件中将模拟函数和原始真实函数编译和链接在一起。 C 只知道如何编译和链接整个源文件。它不能在模块内部挑选和选择功能来混合在一起。

简而言之,这意味着您无法对位于您要测试的同一源文件中的函数进行模拟调用。这是 C 中基于交互的测试的基本规则。总的来说,这会带来更好的设计(尤其是在大型项目中),但它确实会带来更多文件(使用更长的描述性文件名)和有时任意划分的副作用文件之间的代码以启用模拟。

因此,最好的建议是将 foo_init() 与 test_using_foo_init() 分开放在一个单独的文件中。

一般来说,任何一个测试可执行文件都将包含一个源模块和一个或多个模拟模块,这些模块的功能签名都在您正在测试的源代码之外。在最简单的情况下,您至少需要两个不同的模块(一个源模块和一个模拟模块)来使用模拟进行测试。

关于Cmock 无法识别函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51800234/

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