我正在學習使用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