簡體   English   中英

成功單位測試pyinotify?

[英]Success unit testing pyinotify?

我正在使用pyinotify將文件從源目錄鏡像到目標目錄。 當我手動執行時,我的代碼似乎正常工作,但我無法獲得准確的單元測試結果。 我認為問題歸結為:

  1. 我必須在我的測試中使用ThreadedNotifier ,否則它們會掛起,等待手動輸入。
  2. 因為我正在使用另一個線程,我的測試和通知程序不同步。 運行觀察性手動測試時通過的測試在運行單元測試時失敗。

有沒有人成功進行pyinotify單元測試?

在單元測試時,通常應該考慮線程和文件系統之類的事情。 您是否有理由使用實際文件系統,用戶輸入等進行單元測試?

Python使得修補程序非常容易; 例如,你可以用模擬對象(比如Python Mock )替換整個os / sys模塊,這樣你就不需要處理文件系統了。 這也將使您的測試運行得更快。

如果您想使用文件系統進行功能測試,我建議您設置一個具有已知狀態的虛擬機,並在每次運行測試時恢復到該狀態。 您還可以根據需要模擬用戶輸入,文件操作等。

編輯

這是一個如何偽造或模擬“開放”功能的簡單示例。

假設你有一個帶有get_text_upper函數的模塊my_module

def get_text_upper(filename):
    return open(filename).read().upper()

你想在不實際接觸文件系統的情況下測試它(最終你將開始只傳遞文件對象而不是文件名以避免這種情況,但現在......)。 您可以模擬open函數,以便它返回一個StringIO對象:

from cStringIO import StringIO

def fake_open(text):
    fp = StringIO()
    fp.write(text)
    fp.seek(0)
    return fp

def test_get_text():
    my_module.open = lambda *args, **kwargs : fake_open("foo")
    text = my_module.get_text_upper("foo.txt")
    assert text == "FOO", text

使用模擬庫只會使這個過程更容易,更靈活。

這是關於python的模擬庫stackoverflow帖子

暫無
暫無

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

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