Cmocka: checking a structure passed as a parameter

2019-07-25 13:58发布

问题:

Let's say that I declare a C struct called foo, which has an int field called bar and a char * called baz.

How do I use the Cmocka expect_ and check_expected macros to check that the structure passed was correct and both fields have the expected values? If there is an example in the documentation, I missed it.


[Update] Perhaps I can use expect_check()? But I can't find an example :-(

回答1:

Use expect_memory(...) and check_expected(...):

Example:

I assume you have a function under test fut which calls a subfunction subfunc. Your struct looks like this:

typedef struct foo_s {
  int bar;
  int baz;
} foo;

And your test driving function could look like this:

void test(void **state) {
   foo myfoo = {
     .bar = 42,
     .baz = 13,
   };
   expect_memory(subfunc, param, &myfoo, sizeof(foo));

   fut();
}

And the subfunctions could look like this:

void subfunc(foo *param){
   check_expected(param);
}


标签: c cmocka