单元测试时模拟 C 函数

Mock a C function when unit testing with unity

我有一个包含 2 个模块的 C 项目 - A 和 B。 B 有一个函数调用 A 的函数。

int B_func() {
  if (1 == A_func()) {return 1;}
  return 2;
 }

我用unity来测试这些模块。

TEST(B, test_b) {
  TEST_ASSERT_EQUAL(1, B_func())
}

当我测试模块 B 时,我想模拟 A_func,这样它将使用我的实现并更改 return 值。有没有办法不改变模块B的源代码就可以做到这一点?

我最终使用了 Mimick。 https://github.com/diacritic/Mimick

有点麻烦。我需要将我的项目编译为共享对象,然后 link 将它用于我的测试,这样我的函数就会在 GOT 中,所以它并不理想,但成功地解决了我的问题。