1
假設我有在其工作期間創建SVN分支的實體。要執行功能測試我創建多個基本相同的方法(我使用Python單元測試框架,但問題涉及到任何測試框架):將參數傳遞給tearDown方法
class Tester(unittest.TestCase):
def test_valid1_url(self):
url="valid1"
BranchCreator().create_branch(url)
self.assertUrlExists(url) # assume I have this method implemented
def test_valid2_url(self):
url="valid2"
BranchCreator().create_branch(url)
self.assertUrlExists(url) # assume I have this method implemented
def test_invalid_url(self):
url="invalid"
self.assertRaises(ValueError, BranchCreator().create_branch, url)
每次測試我想刪除所產生的分支或做什麼,如果測試失敗之後。理想情況下,我會使用以下內容:
@teardown_params(url='valid1')
def test_valid1_url(self):
def tearDown(self, url):
if (url_exists(url)): remove_branch(url)
但是tearDown不接受任何參數。 我看到一些很骯髒的解決方案:
一)創建測試場「used_url」,將其設置在每一個方法和拆卸使用:
def test_valid1_url(self):
self.used_url="valid1"
BranchCreator().create_branch(self.used_url)
self.assertUrlExists(url)
...
def tearDown(self):
if (url_exists(self.used_url)): remove_branch(self.used_url)
它應該工作,因爲(至少在我的環境)所有的測試都是順序運行的,所以不會有衝突。但是這個解決方案由於共享變量而違反了測試的獨立性原則,如果我設法同時啓動測試,它將不起作用。
b)利用單獨的方法,像cleanup(self, url)
並從每一個方法
是否有任何其他的方式調用它呢?
有些人認爲''tearDown''應該永遠不會被添加到測試框架中。讓你的「b」解決方案成爲正確的解決方案。我會用適當的異常處理來創建參數化測試以消除重複。 – zhon