2017-09-24 51 views
0

單元測試我有2個模塊爲C項目C函數 - A和B. B具有調用從A.函數模擬當與統一

int B_func() { 
    if (1 == A_func()) {return 1;} 
    return 2; 
} 

我使用統一測試這些功能模塊。

TEST(B, test_b) { 
    TEST_ASSERT_EQUAL(1, B_func()) 
} 

當我測試模塊B時,我想模擬A_func,因此它會使用我的實現並更改返回值。有沒有辦法做到這一點,而無需更改模塊B的源代碼?

+0

我看不到您的問題。該函數在B中沒有實現。那麼爲什麼不呢? (以及爲什麼模擬,只需更改'A_func'。) – Olaf

+0

我不想更改A_func,因爲它已經是項目的一部分並且已鏈接進去。我想告訴B_func忽略A_func的原始實現,即在B的單元測試中模擬A_func ... –

回答

1

我結束了使用Mimick。 https://github.com/diacritic/Mimick

這有點麻煩。我需要將我的項目編譯爲一個共享對象並將其鏈接到我的測試,所以我的函數將在GOT中,所以它不是理想的,但成功地解決了我的問題。