在单元测试环境中模拟/伪造静态功能

时间:2017-04-03 10:14:34

标签: c unit-testing dependency-injection mocking cpputest

我正在使用 cpputes 来执行c代码的单元测试。

在我测试的源代码中,我有一个静态函数,我想成为"重定向"到一个"伪造"从单元测试环境调用时的函数版本。

让我们说,我有这样的事情:

正在测试的源代码:

void my_main()
{
   read(int8 address);
}

由此;

   static int8 read(int8 address)
   {
      return something;
   }

单元测试环境:

TEST(MY_TESTS, READ)
{
   my_main();
}

在单元测试环境中调用 my_main()时,我想重定向调用

读取(int8地址) 致:

int8 fake_read(int8 address)
{
   //do_something
}

这里的正确方法是什么?我已经尝试使用函数指针而不是注入依赖项,但它不起作用。 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

也许您可以利用链接器执行此操作:创建两个源文件 - 一个包含静态函数的实际生产代码,另一个包含模拟实现。

对于测试,链接第二个;以及第一个运行您的应用程序。

答案 1 :(得分:0)

我知道古老的问题,但是...

查看关于 mock_c() http://cpputest.github.io/mocking_manual.html#other_mock_support

的文档
int64_t GetTimeMS (void)
{
    mock_c ()->actualCall ("GetTimeMS");

    return (mock_c ()->returnValue ().value.longIntValue);
}