KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I would like to write tests for a C library, in C. I'd like to mock out some functions for the test. Suppose my library is compiled from the following source: /* foo.h */ int myfunction(int x, int y); /* foo.c */ #include "foo.h" static int square(int x) { return x * x; } int myfunction(int x, int y) { return square(x) + square(y); } I want to write a test like this: /* foo_test.c */ #include "foo.h" static int square(int x) { return x + 1; } int main(void) { assert(myfunction(0, 0) == 2); return 0; } Is there any way I can compile so that myfunction will use the definition of square in foo_test.c , instead of the one in foo.c , only when linking the executable foo_test ? That is, I want to compile foo.c into a library (let's call it libfoo.so ), and then compile foo_test.c with libfoo.so and some magic so that I'll get an executable foo_test which uses the different implementation of square . It would be helpful to hear solutions for when square is not declared static , but solving the above case would be even better. EDIT: It seems hopeless, but here's an idea: Suppose I compile with -O0 -g so it's unlikely that square will get inlined and I should have symbols showing where the call was resolved. Is there a way to sneak into the object file and swap out the resolved reference?
Tags (comma-separated)
Save Edits
Cancel