2017-09-05 110 views
0

當測試與不同的輸入的單功能(一些是默認值),是它更好的做法是做:Python單元測試:使用不同的輸入測試單個函數的多個測試函數?

def test_init(self): 
    page = HTMLGen("test", "path\\goes\\here") 
    self.assertEqual(page.path, "path\\goes\\here\\index.html") 

    page_2 = HTMLGen("test", "path\\goes\\here", "cool_page") 
    self.assertEqual(page_2.path, "path\\goes\\here\\cool_page.html") 

def test_init(self): 
    page = HTMLGen("test", "path\\goes\\here") 
    self.assertEqual(page.path, "path\\goes\\here\\index.html") 

def test_init_with_filename(self): 
    page = HTMLGen("test", "path\\goes\\here", "cool_page") 
    self.assertEqual(page.path, "path\\goes\\here\\cool_page.html") 
+1

我會去第二種方法,因爲這是更詳細的,也是兩種情況的目的有點不同。第一個案例測試一個空白的init,而第二個案例測試一個參數輸入。 – Szabolcs

+1

絕對是第二種方法。你正在測試兩種不同的情況,所以你的第二種方法肯定是我認爲你應該使用的。它更加明確,有助於更好地記錄行爲。但是有一條評論。你應該確保'test_init'也被重命名以反映你正在測試的行爲。 – idjaw

+0

https://en.wikipedia.org/wiki/Data-driven_testing https://github.com/wolever/parameterized – dm03514

回答

1

第二種方法是更好的,因爲如果第一測試失敗,第二個將仍然有機會跑。這可以爲您提供更多的信息來確切地追蹤錯誤發生的位置以及造成錯誤的原因。

此外,任何清理/拆卸代碼將在測試之間運行,這可以幫助確保測試是獨立的。

+0

但是我不想在這種情況下使用setup或teardown?因爲如果我在setUp中分配了self.page = HTMLGen(「test」,「path \\ goes \\ here」),那麼問題在於我只需要在第二個函數中重新定義另一個變量:page = HTMLGen( 「test」,「path \\ goes \\ here」,「cool_page」)呢? – BUInvent

相關問題