单元测试失败时是否有抛出类似错误信息的约定?
我正在写单元测试,结果出现了很多类似的错误信息,导致代码看起来很乱。
像这样:
# Test that compare_pass1 is downstream to secondary_pass1
self.assertTrue(
all(
task in all_downstream_task_for_secondary_pass1_task
for task in {compare_pass1}
),
f'One of {compare_pass1} not found in downstream to {secondary_pass1_task task}',
)
# Check that primary_pass1 is upstream to secondary_pass1
self.assertTrue(
all(
task in all_upstream_task_for_secondary_pass1_task
for task in {primary_pass1_task}
),
f'One of {primary_pass1_task} not found in upstream to {secondary_pass1_task} task',
)
# Check that secondary_pass1 is upstream to compare_pass1
self.assertTrue(
all(
task in all_upstream_task_for_compare_pass1_task
for task in {secondary_pass1_task}
),
f'one of {secondary_pass1_task} not found in upstream to {compare_pass1_task} task',
)
我说的就是当单元测试失败时抛出的错误信息,虽然它们不完全一样,但信息内容是相似的。
有没有什么约定,建议创建一个函数,然后在抛出错误信息时调用这个函数呢?
2 个回答
0
你还可以自己定义一些断言,用来封装断言的逻辑和错误信息。
你可以把它们作为方法定义在你的测试类里:
class YourTestClass(unittest.TestCase):
def assertIsDownStream(self, all_downstream_tasks, task, original_task):
self.assertTrue(
all(task in all_downstream_tasks for task in {task}),
f"One of {task} not found in downstream to {original_task} task",
)
def assertIsUpStream(self, all_upstream_tasks, task, original_task):
self.assertTrue(
all(task in all_upstream_tasks for task in {task}),
f"One of {task} not found in upstream to {original_task} task",
)
# Your test cases here ...
或者你也可以在一个单独的类里定义它们,然后把这个类作为混入使用:
class CustomAssertions:
def assertIsDownStream(self, all_downstream_tasks, task, original_task):
self.assertTrue(
all(task in all_downstream_tasks for task in {task}),
f"One of {task} not found in downstream to {original_task} task",
)
def assertIsUpStream(self, all_upstream_tasks, task, original_task):
self.assertTrue(
all(task in all_upstream_tasks for task in {task}),
f"One of {task} not found in upstream to {original_task} task",
)
class YourTestClass(unittest.TestCase, CustomAssertions):
# Your test cases here ...
注意,根据你的具体情况,你可以为参数定义更合适的名称。
在你的测试中,你可以像这样简单地使用这些断言:
# Test that compare_pass1 is downstream to secondary_pass1
self.assertIsDownStream(all_downstream_task_for_secondary_pass1_task, compare_pass1, secondary_pass1_task)
2
你可以使用非f字符串格式化来定义一个字符串模板,然后用变量来填充这个模板:
compare_pass1 = "foo"
secondary_pass1_task = "bar"
s = 'One of {} not found in downstream to {}'
print(s.format(compare_pass1, secondary_pass1_task))
compare_pass2 = "fee"
secondary_pass2_task = "bas"
print(s.format(compare_pass2, secondary_pass2_task))