Unit testing 将参数传递给拆卸方法

Unit testing 将参数传递给拆卸方法,unit-testing,oop,python-unittest,teardown,Unit Testing,Oop,Python Unittest,Teardown,假设我有一个实体,它在工作期间创建SVN分支。为了执行功能测试,我创建了多个几乎相同的方法(我使用python unittest框架,但问题涉及任何测试框架): 在每次测试之后,我想删除生成的分支,或者在测试失败时什么也不做。理想情况下,我会使用以下内容: @teardown_params(url='valid1') def test_valid1_url(self): def tearDown(self, url): if (url_exists(url)): remove_bran

假设我有一个实体,它在工作期间创建SVN分支。为了执行功能测试,我创建了多个几乎相同的方法(我使用python unittest框架,但问题涉及任何测试框架):

在每次测试之后,我想删除生成的分支,或者在测试失败时什么也不做。理想情况下,我会使用以下内容:

@teardown_params(url='valid1')
def test_valid1_url(self):

def tearDown(self, url):
    if (url_exists(url)): remove_branch(url)
但拆卸不接受任何参数。 我看到了一些相当肮脏的解决方案:

a) 在Tester中创建字段“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)
并从每个方法调用它

还有其他方法吗?

我认为b)解决方案可以工作,即使它要求在每次测试中调用helper方法,这听起来像是一种重复。
另一种方法是在“assertUrlExists”函数中调用helper方法。通过这种方式,重复被删除,您可以避免为了管理清理而再次检查URL的存在:您拥有断言结果,并且可以使用它。

有些人认为,
tearDown
不应该被添加到测试框架中。使您的
b
解决方案成为正确的解决方案。我将创建一个带有适当异常处理的参数化测试,以消除重复。
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)