假设我有在其工作期间创建 SVN 分支的实体。为了执行功能测试,我创建了多个几乎相同的方法(我使用 python unittest 框架,但问题与任何测试框架有关):
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 不接受任何参数。我看到一些非常肮脏的解决方案:
a)在Tester中创建字段“used_url”,在每个方法中设置它并在tearDown中使用:
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)
,并从每个方法中调用它
还有其他方法吗?