2013-05-09 24 views
6

pyfakefs聽起來非常有用:它「最初是作爲一個溫和的假執行的核心Python模塊,支持中等複雜的文件系統交互,並引入谷歌範圍。 。自那時以來,它已經收到許多(經過充分測試)的貢獻,以擴展其功能和實用性,並在900多次Google Python測試中使用。「如何替換文件訪問引用了被測模塊

文檔似乎目前只有source code本身的文檔字符串內可用。它解釋了該模塊提供以下元素:

  • FakeFile:提供真實文件的外觀。
  • FakeDirectory:提供真實目錄的外觀。
  • FakeFilesystem:提供真實目錄層次結構的外觀。
  • FakeOsModule:使用FakeFilesystem提供假的os模塊更換。
  • FakePathModule:僞造的os.path模塊替換。
  • FakeFileOpen:僞造的file()和open()函數替換。

但是,文檔並未解釋如何在測試中有效使用這些元素。

什麼是保證被測模塊訪問一個假冒的文件系統,而不是真正的一個正確的方式?

+0

我認爲那些在你發現文檔字符串API是基本上你需要測試叫什麼。所以你把它放在單獨的測試方法,或設置,或setupClass(或tearDown *)。還有什麼困擾你? – CppLearner 2013-05-09 19:35:23

+0

我不清楚如何讓被測模塊使用我使用'fake_filesystem' API創建的文件系統。例如,爲了啓用測試,我不認爲有必要爲我的模塊的類或函數提供'file()'函數。我寧願期望以「類似於[此答案]的方式與」仁慈的猴子補丁「做到這一點(http://stackoverflow.com/questions/295438/how-can-one-mock-stub-python-module- like-urllib?rq = 1#answer-295481),但我不確定究竟該如何修復。 – intuited 2013-05-10 00:12:27

+0

如果你必須從頭開始,猴子修補並不是那麼容易。您可以從Python中檢出模擬庫,並通過提供您想要該類返回的對象來爲它修補某些操作。從現在開始,我可以在一兩天內給出一點想法。同時我會看看別人能否給你一些想法。另一種方法是依賴注入 - 但如果你的函數或方法明確地傳遞了一些依賴關係,例如類文件對象或數據庫會話對象,那麼這種方法是有效的。 – CppLearner 2013-05-10 04:07:18

回答

相關問題