作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用 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/
我正在使用 Python 的 unittest 为我的应用程序编写一些测试用例。 .现在我需要将一个对象列表与另一个对象列表进行比较,以检查第一个列表中的对象是否符合我的预期。 如何编写自定义 .as
我是一名优秀的程序员,十分优秀!