2016-02-25 36 views
1

我剛剛開始使用googlemock來模擬C++項目。在我的情況下,我的類將被測試觀察一個寫入的文件,並且每當寫入最少量的新數據時,它就開始做一些工作。在googlemock中嘲弄文件寫入過程

我需要的是寫入文件的過程的模擬類。據我瞭解,我需要完全實現這種「寫入文件」功能,形式爲(對於googlemock)一個虛擬類,從中派生出一個模擬類。模擬包裝器最終用於測試和評估目的,對嗎?

感謝您的幫助!

+0

觀察是如何發生的?數據寫入時,您是在輪詢文件還是通知您的班級? –

+0

嗨。觀察班觀察文件大小。作家是有問題的對象。 – gilgamash

回答

1

我假設你的「觀察者」類的對象被通知 ,那麼「寫入者」類的對象 已寫入最小量的數據。在這種情況下,你需要實現一個抽象的 類,它表示你的「作者」類的一個接口,並且你的真正的「寫」類繼承它並覆蓋它的虛函數。 另外,你的模擬「榨汁器」類的實現繼承了這個接口和 並創建使用MOCK_METHODn模擬實現。

然後,讓您的「觀察者」類使用指向抽象類的指針從「編寫器」對象 接收通知。通過這種方式,您可以使用依賴項 注入在測試階段切換實現,方法是創建一個模擬 「寫入器」對象,並將其地址傳遞給「觀察器」對象(而不是地址轉換爲真實的「寫入器」對象)並設置測試在模擬對象上使用EXPECT_CALL的案例。

這是我可以給你的最好的建議,因爲你沒有向我們提供你的課程的詳細描述。

編輯:

關於你真正的「writter」類的實現:您不必立即創建它,你可以使用模擬類,現在來測試「觀察者」類的行爲,並留下稍後執行。當然,你必須最終實現它,因爲它必須用於生產代碼。

+0

嗨,謝謝你的回覆。如您所設想的那樣,觀察班將收到通知。我希望模擬器模擬文件寫入過程。你所描述的基本上是我理解我必須做的事情 - 主要關注的是實現虛擬類的派生編寫器類是否必須實現對文件的寫入,而模擬類僅用於測試/評估目的。 – gilgamash

+0

對不起,我不清楚問題的重點是什麼。請檢查我更新的答案。希望能幫助到你! –

+0

非常感謝您的幫助!現在事情很清楚。然而,我繼續,我需要以某種方式模擬「文件大小的最小變化量」以獲得真實的測試。 – gilgamash

2

在谷歌模擬術語中,Mocks是用於驗證您的代碼對它們執行特定操作的對象。

你所描述的不是一個模擬,而是一個觸發代碼測試操作的工具類。

當你的課件檢測到它所觀察的文件被寫入時,它會做什麼?例如,如果它執行對另一個對象的調用,那麼你可以使用一個模擬對象來檢查它是否被正確的參數調用,例如,寫入文件的新批量數據。

+0

我的問題正是你所描述的:我是否必須實現你所謂的util類的功能,並將其放在頂層? – gilgamash

+0

@gilgamash這兩件事情都是獨立的。你必須實現util類。無論您是否需要模擬,取決於您的班級在檢測到新數據已寫入文件時的操作。 –

+0

猜對了。謝謝。 Upvote跟隨! – gilgamash