2017-06-05 25 views
1

我剛剛開始使用Cmocka,我一直在這個問題上停留了一段時間。我有一個我正在嘗試構建的cmocka項目。我在嘗試使用'make'時看到錯誤。Cmocka - 錯誤:符號沒有條目

[ ERROR ] --- No entries for symbol __wrap_i2c_read.

而且我看到在mock_i2c.c文件中的錯誤,在這裏我呼籲mock()

Could not get value to mock function __wrap_i2c_read.

現在我只是想嘲笑真/假值獲得行它工作。所以我假裝貌似

bool __wrap_i2c_read(void) 
{ 
    return (mock()); 
} 

我檢查了在我的測試我打電話will_return(__wrap_i2c_read, true);

在我的Makefile我有LDFLAGS += -Wl,--wrap=i2c_readcmocka.h列入mock_i2c.c文件。

這似乎不是一個專門針對這個模擬函數的問題,因爲如果我不使用它,我會得到該文件中其他模擬函數的相同錯誤。 我不確定需要其他信息,請讓我知道。任何人都知道這意味着什麼/看到這之前?

謝謝。

編輯:所以我想我已經找出了爲什麼我得到這個錯誤。我正在測試的函數中有一個for循環。模擬函數從這個函數中被調用。一旦我刪除循環,錯誤消失。這可能與will_return如何排隊模擬值有關?並且for循環正在妨礙?

編輯2:好的,所以看起來我只是沒有足夠的模擬值排隊。

回答

0

您的編輯2是clou!

您必須像調用'amock'那樣經常調用'will_return'。

對於您的FUT(被測試函數)的每個調用,都會調用「amock()」。所以在你打電話給你的FUT之前,你需要使用'will_return'。 'will_return'將一個元素放到堆棧上。 ()'將從這個堆棧中獲取一個元素。因此,一次調用'will_return'和兩次調用'()'會導致下溢,最終導致您提到的cmocka錯誤。

可能想使用'will_return_always'或'will_return_count'。

編輯:對不起,highliting。坐在廚房裏,在我的智能手機上打字並不舒適。我將在以後在我的電腦上使用。

相關問題