簡體   English   中英

如何使用 EasyMock 模擬文件?

[英]How to mock a file with EasyMock?

我最近被介紹到 EasyMock,並被要求使用它為 FileMonitor 類開發一些單元測試。 FileMonitor 類基於定時事件,該事件喚醒並檢查定義的文件和目錄列表中的文件修改。 我知道如何使用實際的文件系統來做到這一點,編寫一個寫入文件的測試並讓 FileMonitor 做它的事情。 那么,我如何使用 EasyMock 做到這一點? 我只是不知道如何讓 EasyMock 模擬文件系統。

謝謝,托德

類似的東西:

import static org.easymock.classextension.EasyMock.*;

File testDir = createMock(File.class);
expect(testDir.lastModified()).andReturn(10L);
// more expectations
replay(testDir);
// create a FileMonitor watching testDir
// run the method which gets invoked by the trigger     
verify(testDir);

看看優秀(和簡潔)的用戶指南 不過,您可能會重新考慮使用 EasyMock - 大多數人目前正在使用或正在切換到更先進和更積極開發的Mockito (受 EasyMock 啟發)。

模擬的基本技術是引入一個接口(如果當前設計沒有),它為被模擬的真實服務(依賴項)提供方法。 測試正在測試被測類是否與依賴項正確交互。 在這里正確意味着它會做你期望它做的事情。 這並不意味着它做了正確的事情,因為正確的事情只能通過使用真實組件的集成測試來確定(您設想通過創建真實文件來做什么)。

所以你需要在被測類上有一個方法,讓你傳入這個接口的實現。 最明顯的是通過構造函數。 您有生產構造函數,它使用命中真實文件系統的接口的真實實現來初始化類,然后在測試中將模擬傳遞給構造函數。

在測試中,您在類上運行方法並斷言以您期望的方式調用了接口。

我會注意到,在創建類之后通過模擬進行單元測試的價值有限,但它有助於鎖定行為,以便將來對類的更改不會以令人驚訝的方式打破預期。

我希望這有助於您入門。

一些模擬框架支持模擬實際的具體類,這在測試后單元測試中很有意義(通過攔截對真實類的調用而不僅僅是接口)。 我不知道 EasyMock 是否可以讓您這樣做,但如果您需要這種功能, JDave可能是您要去的地方。 它甚至可以讓您模擬最終課程。

我會將對文件系統的實際調用放在其單獨的包私有方法中。 為了測試,擴展類並覆蓋該方法。 因此,您實際上並未調用文件系統。

EasyMocks classextension 也可以創建局部模擬,但我並不完全相信這一點。

http://easymock.org/EasyMock2_4_ClassExtension_Documentation.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM