2010-08-03 51 views

回答

3

那麼,在這個特殊情況下(Dist::Zilla插件),你會想要使用Dist::Zilla::Tester。它負責創建一個臨時目錄,用文件填充它,然後進行清理。例如,請參閱the tests from my DZP::CJMtests from Dist::Zilla itself,尤其是plugins directory

更新: Dist :: Zilla 4.200002推出了Test::DZil模塊,它增加了一些對測試插件有用的實用函數。您可能想要直接使用它而不是直接使用Dist :: Zilla :: Tester。

3

這有點取決於模塊,但我的一般策略是:

  • 確保文件內容的邏輯是100%獨立的 - 只要在不同的方法是 - 從文件力學(如選擇目錄/打開文件/關閉文件/錯誤處理)。

  • 確保文件結構是100%靈活的,例如,您可以從外部驅動程序中選擇目錄/文件名。

  • 的文件力學寫入測試中,通過簡單地打開指定文件中指定的目錄,將其關閉,確保沒有錯誤發生,該預期的文件存在,並且有大小爲零

  • 創建測試數據數組,用由3份

    1. 輸入數據爲文件內容的邏輯數組的每個元素,可能加上測試配置指示如有必要對這些數據調用從文件內容的邏輯方法。

    2. 預計文件名設置

    3. 預期的文件內容,焦油揉成團預期文件(要生成精確預期的內容和正確的預期的名稱準確的文件)的形式。

      預計的成果壓縮包應該是在一個單獨的子目錄(說得清你的測試腳本住目錄下的「expected_results」。

      您需要在情況下,你的文件生成邏輯生成> 1文件壓縮包。

  • 然後,運行一個循環在測試陣列中的每個測試之前創建:

    1. 創建一個新的「實際結果」臨時目錄(或清理之前測試的目錄)

    2. 將您模塊中的目錄設置爲臨時目錄;將測試信息中的模塊文件名設置爲預期的文件名。

    3. 使用測試的邏輯方向(如果適用)和測試的輸入數據運行從模塊文件開罐器方法(先前測試)

    4. 執行內容生成邏輯。

    5. 運行文件接近方法(以前測試過)

    6. 創建一個「臨時的預期結果」 temp目錄(或清理從最後一次測試的一個)

    7. 複製「期望的結果」壓縮包從「expected_results」測試子目錄到上一個項目符號點創建的「臨時預期結果」臨時目錄

    8. 解壓縮「臨時預期結果」臨時目錄中的tarball並從那裏刪除tarball。

    9. directory -diff「臨時預期結果」臨時目錄與「實際結果」臨時目錄(例如,確保兩個文件都有100%相同的文件列表,並且每個文件的內容都是100%相同的,通過system()通話使用diff

由於上述邏輯是非常通用的,我一般抽象大部分走成一個「測試:: FileGenerator」模塊可以重新使用的所有單位和整合測試文件生成能力測試

+0

好吧,忘了提及這一點,但是如果關於使文件內容生成邏輯的部分只與文件句柄對象或類屬性一起工作,這種方法將大大受益。這種自我明顯但可能是明確闡明的有價值的技術。 – DVK 2010-08-03 11:00:12