2014-07-13 68 views
1

假設我想編寫另一個markdown解析器,並且我希望它完全測試 。我想我會創建兩個文件夾markdownhtml,每個文件夾包含 相同的文件名。要執行我需要只是一個單一的功能測試:用python中的外部文件測試

def test_correct_parsing(md, html): 
    assert markdown(md) == html 

我的問題:這是一個很好的策略?如果是這樣,我怎樣才能用pytest來做到這一點?

回答

2

您需要的不僅僅是我認爲的 - 因爲您只會證明您可以解析這些特定的降價輸入流。 我所看到的每一個測試策略是多層的 - 例如:

  1. 爲單獨每一個具體的降價標籤的測試 - 確保分析程序正確翻譯每到預期的HTML片段 - 這些測試應該和輸出文本 - 不讀/寫文件 - 易於測試 - 易於自動化。
  2. 對每個容器標籤的測試 - 即創建跨度/ div /表等的標籤 - 確保容器html正確地形成,並且正確地生成包含的降價 - 再次/文本字符串輸出中的文本字符串。
  3. 一組測試格式不正確的標籤 - 確保任何故障都會生成正確的html /錯誤 - 再次出現/ text字符串中的文本字符串。
  4. 一組文件處理測試 - 包括不存在的文件,破損的文件,無權限的文件
  5. 作爲最終置信度的測試。

在測試代碼時,您應該也可以在您的代碼中使用代碼覆蓋率統計信息 - 以確保您事實上涵蓋了所有代碼路徑。

我推薦這有幾個原因:

  • 這僅僅是更爲有效的單獨測試每一件事情 - 這樣,如果事情失敗,你可以很容易地找出哪些測試失敗 - 因爲每個單獨的測試報告上它的自己的成功/失敗。如果你只做了一大組測試 - 並且出現了一些失敗的情況,那麼你必須確定你的html輸出中哪裏出錯了(如果你確實得到了任何輸出),然後嘗試確定哪些降價元素失敗。
  • 如果你改變了一些東西 - 測試你改變的東西很容易。
  • 使用分層方法,您可以在寫入代碼時測試內容 - 無需編寫所有代碼。
  • 這簡直就是好的做法 - 許多專家爲此推薦多年的方法等等。除非你有一個很好的理由,堅持良好的做法是明智的 - 這隻會讓你的生活變得更輕鬆。
+0

爲什麼我不能在不同的文件中包含所有這些文件?一個'header.md'文件,其中包含所有形式的標題,一個用於列表的'list.md'等。以及其他一些混合了多種元素的文件。 – Zii8roZi

+0

在答案中添加一些註釋以解釋原因。 –

+1

所以理想情況下,您應該單獨測試給定標籤的所有形式。在現實世界的場景中,我們將單元測試更小的組件,並嘗試創建我們能想到的所有可能性的測試用例。一旦他們通過,你可以確信你的組件工作正常。然後,我們轉向功能和集成測試,在這些測試中,我們使用類似的形式與其他事物一起在真實世界的用例中測試您的組件。這將有助於您瞭解什麼時候您的組件發生故障以及由於什麼更容易。 – vaidik