【发布时间】:2013-06-02 22:19:46
【问题描述】:
我是一名 C++ 开发人员,在测试方面,通过注入依赖项、覆盖成员函数等来测试类很容易,这样您就可以轻松测试边缘情况。但是,在 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( ... );
}
【问题讨论】:
-
Possible duplicate,如果不只是相关的话。
-
@ajp15243:我对单元测试时使用什么框架或工具不太感兴趣。相反,我对为高度依赖或使用常见 C 习惯用法的 C 代码编写测试的方法感兴趣,例如传递的
global_context_t结构。 -
好吧,如果可以的话,我会编辑掉“重复”部分。以为您至少会发现这些框架很有用,但是哦,好吧:/.
-
简短的回答是在编写 C 代码和单元测试时必须考虑 C。不要尝试将 C 用作 C++(也不要反过来,就此而言),您就是做不到。
-
嗯。我会说简短的回答是那是相当糟糕的c代码。 c 程序员应该像其他人一样为测试编写代码。
标签: c unit-testing