我正在学习使用Ceedling和CMock for Mock在现有嵌入式C代码库(我可以调整以适合它)上进行单元测试。如何在同一UUT中模拟函数C
我遇到了单元中的一个函数调用同一单元内的第二个函数的情况。
int foo_a(int r)
{
/* foo_a work */
/* do not wish to test this function just to test foo_b. */
}
int foo_b(int i) /* function to test */
{
/* foo_b work */
if (some_condition)
foo_a(k); /* need to test if foo_a() is called or not. */
}
我不想考foo_a()
为foo_b()
测试的一部分。我如何模拟foo_a()
,这样我仍然可以测试它是否被调用,但不测试foo_a()
函数本身?
我对C的了解不多,但如果它与许多其他语言一样,可以将方法标记为虚拟/可覆盖。在这样的情况下,你可以提供一个模拟/伪造的已知/设置的返回'foo_a'。这样,当使用模拟/伪造类时,当你调用'foo_b'时,你会碰到你的模拟/重写的'foo_a'方法,而不是真正的impl,所以你可以专注于测试'foo_b'而不用担心'foo_a 'impl。 – Kritner
@ kritner C不是面向对象的。它没有诸如虚拟,可重写,继承或多态等概念。 – Toby