我有幾個模塊(DZP::Catalyst和DZP::OurPkgVersion),他們的目的都是將文件寫入磁盤。我不知道如何測試它們,有沒有測試寫入磁盤的文件的好策略?任何地方我可以去閱讀它?如何測試輸出/修改文件的模塊/腳本?
回答
那麼,在這個特殊情況下(Dist::Zilla插件),你會想要使用Dist::Zilla::Tester。它負責創建一個臨時目錄,用文件填充它,然後進行清理。例如,請參閱the tests from my DZP::CJM或tests from Dist::Zilla itself,尤其是plugins directory。
更新: Dist :: Zilla 4.200002推出了Test::DZil模塊,它增加了一些對測試插件有用的實用函數。您可能想要直接使用它而不是直接使用Dist :: Zilla :: Tester。
這有點取決於模塊,但我的一般策略是:
確保文件內容的邏輯是100%獨立的 - 只要在不同的方法是 - 從文件力學(如選擇目錄/打開文件/關閉文件/錯誤處理)。
確保文件結構是100%靈活的,例如,您可以從外部驅動程序中選擇目錄/文件名。
的文件力學寫入測試中,通過簡單地打開指定文件中指定的目錄,將其關閉,確保沒有錯誤發生,該預期的文件存在,並且有大小爲零
創建測試數據數組,用由3份
輸入數據爲文件內容的邏輯數組的每個元素,可能加上測試配置指示如有必要對這些數據調用從文件內容的邏輯方法。
預計文件名設置
預期的文件內容,焦油揉成團預期文件(要生成精確預期的內容和正確的預期的名稱準確的文件)的形式。
預計的成果壓縮包應該是在一個單獨的子目錄(說得清你的測試腳本住目錄下的「expected_results」。
您需要在情況下,你的文件生成邏輯生成> 1文件壓縮包。
然後,運行一個循環在測試陣列中的每個測試之前創建:
創建一個新的「實際結果」臨時目錄(或清理之前測試的目錄)
將您模塊中的目錄設置爲臨時目錄;將測試信息中的模塊文件名設置爲預期的文件名。
使用測試的邏輯方向(如果適用)和測試的輸入數據運行從模塊文件開罐器方法(先前測試)
執行內容生成邏輯。
運行文件接近方法(以前測試過)
創建一個「臨時的預期結果」 temp目錄(或清理從最後一次測試的一個)
複製「期望的結果」壓縮包從「expected_results」測試子目錄到上一個項目符號點創建的「臨時預期結果」臨時目錄
解壓縮「臨時預期結果」臨時目錄中的tarball並從那裏刪除tarball。
directory -diff「臨時預期結果」臨時目錄與「實際結果」臨時目錄(例如,確保兩個文件都有100%相同的文件列表,並且每個文件的內容都是100%相同的,通過
system()
通話使用diff
。
由於上述邏輯是非常通用的,我一般抽象大部分走成一個「測試:: FileGenerator」模塊可以重新使用的所有單位和整合測試文件生成能力測試
- 1. 如何修復單元測試文件中缺失的模塊?
- 2. 修改測試文件模板
- 3. PHP的輸出腳本需要修改
- 4. 帶輸出的iverilog測試臺模塊
- 5. nodejs如何測試大輸出文本
- 6. 的UNIX shell腳本:如何修改輸出相應的文件名
- 7. 如何使用php修改腳本的輸出?
- 8. 如何用sed修改shell腳本輸出的字體顏色?
- 9. 如何將Google測試輸出打印到文本文件?
- 10. 如何從腳本輸出.cprofile文件
- 11. 如何輸出腳本到文件?
- 12. 顯示器輸出NCrunch測試修改控制檯輸出流
- 13. 修改Magento2模塊的css文件
- 14. Drupal留言簿模塊文本修改
- 15. (基本的JAVA)如何測試輸出
- 16. 如何測試Python腳本的輸出是什麼
- 17. Python腳本來測試最近修改的文件 - 不一致的結果
- 18. 使用輸入文件和輸出解決方案進行測試的腳本
- 19. 如何修改zabbix腳本?
- 20. 如何修改wget輸出
- 21. 如何修改輸出
- 22. 如何測試模塊的運行塊
- 23. 單元測試文件修改
- 24. 如何用Python腳本修改文件夾中的所有文本文件
- 25. 如何將輸出保存爲python腳本的文本文件?
- 26. Netbeans模塊開發 - 如何修改打開的文件
- 27. 我如何修改ASP.NET Repeater的輸出來替換文本
- 28. 鼻子:捕獲腳本輸出以及測試輸出
- 29. 修改drupal塊文本
- 30. CSS - 如何修剪文本輸出?
好吧,忘了提及這一點,但是如果關於使文件內容生成邏輯的部分只與文件句柄對象或類屬性一起工作,這種方法將大大受益。這種自我明顯但可能是明確闡明的有價值的技術。 – DVK 2010-08-03 11:00:12