2012-04-23 92 views
1

我有一個不同的audioformats的列表,應該轉換某個文件。我寫的轉換函數現在應該轉換文件並返回成功信息,新創建文件的路徑或一些故障信息。第一個斷言失敗後,我可以測試所有測試的斷言嗎?

self.AUDIO_FORMATS = ({'format':'wav', 'samplerate':44100, 'bitdepth':16 }, 
         {'format':'aac', 'samplerate':44100, 'bitdepth':16 }, 
         {'format':'ogg', 'samplerate':44100, 'bitdepth':16 }, 
         {'format':'mp3', 'samplerate':44100, 'bitdepth':16 }) 

作爲一種可能的原因轉換的一個失敗是缺少庫,或者在這樣的圖書館借了一些錯誤或故障或我實現它,我想測試每個轉換有名單最終通過並且失敗的測試,失敗的測試者告訴我確切的轉換確實造成了麻煩。這是我試過的(有點簡化):

def test_convert_to_formats(self): 

    for options in self.AUDIO_FORMATS: 
     created_file_path, errors = convert_audiofile(self.audiofile,options) 
     self.assertFalse(errors) 
     self.assertTrue(os.path.isfile(created_file_path), 

現在,這是當第一次轉換失敗時立即中止測試。我可以爲每個轉換寫一個測試函數。這將導致必須爲每個添加的格式編寫一個新的測試,現在我只需向AUDIO_FORMATS元組添加一個新字典。

+1

您的單元測試應該只測試一個重點場景。是的,在你的情況下,它正在轉換爲一種特定的格式。但是,每種格式都有特定的場景。您的測試只應測試特定格式的轉換。這並不意味着你必須編寫多個測試,每種格式都有一個測試。您可以通過格式使方法循環,​​併爲每種格式調用通過特定格式的測試方法。通過這種方式,您可以確保無法轉換1格式的測試不會影響另一個格式的測試,也無需將斷言解析爲數組等。 – Nope 2012-04-23 11:34:00

+0

@Francois:這聽起來幾乎和我打算做的一樣。我只是無法在TestCase中工作。你能提供一個關於如何編碼的例子嗎? (我會相應更新我的問題) – marue 2012-04-23 11:40:36

+0

我來自.Net背景。我不知道python,並且不能給你這個語法。這也是爲什麼我只添加了一條評論,直接嘗試一種更有條理的執行測試的方式。在.NET中,測試框架允許您在測試方法上添加一個屬性,指定您每次調用測試時要傳遞的不同參數集。適用於像您這樣的情況。可悲的是,我不知道如何在python中執行該實現。如果python受限制,「Ates Goral」的解決方案可能是唯一的方法。 – Nope 2012-04-23 11:48:53

回答

6

而不是斷言,將錯誤存儲在數組中。在迭代結束時,聲明errors數組爲空,並可能將數組內容轉儲爲斷言失敗原因。

0

爲什麼不使用嘗試...除...

errors = [] 

    for option in optionlist: 
    try: 
     assert_and_raise1(option) 
     assert_and_raise2(...) 
    except Exception, e: 
     errors.append("[%s] fail: %s"%(option, e)) 

    for e in errors: 
    print e 
+0

這幾乎和Ates Goral提出的一樣。如果我只是不做斷言,我不需要捕捉異常。所以當我決定收集錯誤時,我會堅持使用Ates解決方案。不管怎麼說,還是要謝謝你。 – marue 2012-04-23 12:08:36