cunit-testingunity-test-framework

Mock a C function when unit testing with unity


I have a C project with 2 modules - A and B. B has a function that calls a function from A.

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

I use unity to test these modules.

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

When I test module B, I want to mock A_func so it will use my implementation and change the return value. Is there a way to do this without changing the source code of module B?


Solution

  • I ended up using Mimick. https://github.com/diacritic/Mimick

    It's a bit cumbersome. I needed to compile my project as a shared object and link it to my tests so my functions will be in the GOT, so it is not ideal, but successfully solves my problem.