gpt4 book ai didi

unit-testing - 将参数传递给 tearDown 方法

转载 作者:行者123 更新时间:2023-12-03 09:28:57 25 4
gpt4 key购买 nike

假设我有实体在其工作期间创建 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) 这样的单独方法并从每个方法中调用它

还有其他方法吗?

最佳答案

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

关于unit-testing - 将参数传递给 tearDown 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39579979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com