Я разработчик С++, и когда дело доходит до тестирования, легко протестировать класс, введя зависимости, переопределяя функции-члены и т.д., чтобы вы могли легко проверить края. Однако в C вы не можете использовать эти замечательные функции. Мне сложно добавить модульные тесты для кода из-за некоторых "стандартных" способов написания кода C. Каковы наилучшие способы решения следующих задач:
Передача большого указателя структуры контекста:
void some_func( global_context_t *ctx, .... )
{
/* lots of code, depending on the state of context */
}
Нет простого способа проверить отказ на зависимых функциях:
void some_func( .... )
{
if (!get_network_state() && !some_other_func()) {
do_something_func();
....
}
...
}
Функции с большим количеством параметров:
void some_func( global_context_t *, int i, int j, other_struct_t *t, out_param_t **out, ...)
{
/* hundreds and hundreds of lines of code */
}
Статические или скрытые функции:
static void foo( ... )
{
/* some code */
}
void some_public_func( ... }
{
/* call static functions */
foo( ... );
}