gpt4 book ai didi

python - 断言失败后如何继续单元测试?

转载 作者:太空宇宙 更新时间:2023-11-03 16:42:21 25 4
gpt4 key购买 nike

我想执行 testIdPropery 中的第二个断言,无论第一个断言是否通过。我怎样才能做到这一点而不在第一个断言周围放置 try/except block ?这是代码:

class BlockTests(unittest.TestCase):
def setUp(self):
self.city1 = City(1, "New York")
self.city2 = City(2, "Boston")

def tearDown(self):
self.city1 = None

def testIdProperty(self):
self.assertEqual(2, self.city1.id_city, "Assertion Error!") #This assert might fail
self.assertEqual(2, self.city2.id_city, "Assertion Error!") #Execute this anyway

def testIdGetter(self):
self.assertEqual(1, self.city1.get_id_city(), "Error!")

目前,如果第一个断言失败,测试用例会立即报告失败,并且第二个断言永远不会运行。

最佳答案

从您的测试来看,您似乎正在尝试测试 City 类的 id 属性。因此,您可以测试在 setUp 中定义的两个实例是否设置了正确的值 - 与您所做的类似:

def testIdProperty(self):
self.assertEqual(1, self.city1.id_city, "Fail if City1 does not have id 1")
self.assertEqual(2, self.city2.id_city, "Fail if City2 does not have id 2")

现在,当您运行此测试时,它应该会通过。如果有一天您破坏了代码并且这两个断言之一失败,您希望在运行测试并修复它时看到它。

但是,如果由于某种原因您不希望这些断言暂时失败,直到您稍后返回完成测试,那么您可以像这样跳过该测试:

@unittest.skip("skip this test im not done writing it yet!")
def testIdProperty(self):
self.assertEqual(1, self.city1.id_city, "Fail if City1 does not have id 1")
self.assertEqual(2, self.city2.id_city, "Fail if City2 does not have id 2")

编辑:好的,如果您想抑制失败断言带来的错误,请不要在每个需要的地方都执行 try/except 。最好在测试类之外编写一个通用函数:

def silent_assert(func, *args, **kwargs):
try:
func(*args, **kwargs)
except Exception as exc:
print exc.message

并让这个调用您的断言,这样它将运行代码,并且仅在失败时以静默方式打印错误:

def testIdProperty(self):
silent_assert(self.assertEqual, 1, self.city1.id_city, "City1 does not have id 1")
silent_assert(self.assertEqual, 2, self.city2.id_city, "City2 does not have id 2")

您将能够对其调用任何断言并传递每个断言接受的任意数量的参数。不确定隐藏这样的错误是否是一个好主意,我从来没有这样做过,但这只是我,每个人都有自己的组织风格!

关于python - 断言失败后如何继续单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36683653/

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