2016-06-07 77 views
2

我正在使用Cmocka進行單元測試,並且無法更改。Cmocka如何測試使用正確的參數調用了我的(void)回調函數?

我正在測試我的軟件的一部分,它調用回調函數,如果一個值發生變化,說明哪個數據項更改以及新值是什麼。

的回調函數有這樣的簽名:

typedef void (* Value_changed_call_back) (int item_Id, int new_value); 

對於單元測試,我想註冊一些回調函數,並確保它們實際上是調用,他們獲得正確的參數。

我可以在我的模擬中使用expect_int()來驗證它們是否被調用了正確的參數。

但是,我不明白我可以如何使用will_return(),因爲我的回調函數的類型爲void(並且不能更改)。

我將如何聲明一個模擬回調函數並驗證它是否被調用了正確的參數?請注意,如果該函數未被調用,那麼測試應該失敗。

回答

1

我認爲最好的方法來做你想做的就是爲回調創建一個存根並註冊它。然後在回調函數中,您將一些全局變量設置爲一個值。然後,你將能夠斷言在你的存根函數中設置的值。只要斷言和回調在同一個線程上執行,以確保斷言不是競爭條件,就可以工作。

+0

Sicne你是唯一回答的人,我會把問題和獎勵分給你。如果我不這樣做,系統會自動獎勵你,但你只能獲得一半的積分。歡迎來到Stack Overflow,並感謝您的幫助。 – Mawg

+1

@Mawg謝謝,我確實花時間瀏覽了cmocha文檔,這是我能想到的唯一解決方案。當我關心過去在測試中的執行順序時,我做了類似的全局變量設置。 –

+0

該文檔不是很好,是嗎?實際上,對於最初由Google開發的內容,缺乏可用的信息。然而,使用GCC的鏈接器'wrap'選項的模擬函數的方式非常甜,以至於我找不到更好的系統。 – Mawg

相關問題