gpt4 book ai didi

python - 如何在 Python 中编写自定义的 `.assertFoo()` 方法?

转载 作者:IT老高 更新时间:2023-10-28 21:49:34 26 4
gpt4 key购买 nike

我正在使用 Python 的 unittest 为我的应用程序编写一些测试用例。 .现在我需要将一个对象列表与另一个对象列表进行比较,以检查第一个列表中的对象是否符合我的预期。

如何编写自定义 .assertFoo() 方法?它应该怎么做?它应该在失败时引发异常吗?如果是,哪个异常(exception)?以及如何传递错误信息?错误信息应该是 unicode 字符串还是字节字符串?

不幸的是,official documentation没有解释如何编写自定义断言方法。

如果您需要一个真实的例子,请继续阅读。


我写的代码有点像这样:

def assert_object_list(self, objs, expected):
for index, (item, values) in enumerate(zip(objs, expected)):
self.assertEqual(
item.foo, values[0],
'Item {0}: {1} != {2}'.format(index, item.foo, values[0])
)
self.assertEqual(
item.bar, values[1],
'Item {0}: {1} != {2}'.format(index, item.bar, values[1])
)

def test_foobar(self):
objs = [...] # Some processing here
expected = [
# Expected values for ".foo" and ".bar" for each object
(1, 'something'),
(2, 'nothing'),
]
self.assert_object_list(objs, expected)

这种方法可以非常轻松地以非常紧凑的方式描述每个对象的预期值,而无需实际创建完整的对象。

但是...当一个对象的断言失败时,不会再比较其他对象,这使得调试更加困难。我想编写一个自定义方法,无条件比较所有对象,然后显示所有失败的对象,而不仅仅是第一个。

最佳答案

在这些情况下,我使用多重继承。例如:

首先。我定义了一个类,其中包含将合并的方法。

import os

class CustomAssertions:
def assertFileExists(self, path):
if not os.path.lexists(path):
raise AssertionError('File not exists in path "' + path + '".')

现在我定义一个继承自 unittest.TestCase 和 CustomAssertion 的类

import unittest

class MyTest(unittest.TestCase, CustomAssertions):
def test_file_exists(self):
self.assertFileExists('any/file/path')

if __name__ == '__main__':
unittest.main()

关于python - 如何在 Python 中编写自定义的 `.assertFoo()` 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6655724/

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