Mar*_*Aja 4 python unit-testing
我有一个返回某个类的对象列表的方法(让我们用属性 a、bc 和方法 my_method 调用该类 A。所以我得到类似的东西:
my_method() -> [A(a1, b1, c1), A(a2, b2, c2), A(a3, b3, c3)]
Run Code Online (Sandbox Code Playgroud)
我想对这个方法进行单元测试,但我真的不知道我应该使用哪种断言方法来这样做。
我想写一些类似的东西:
self.assertListEqual(my_method(), [A(a1, b1, c1), A(a2, b2, c2), A(a3, b3, c3)])
Run Code Online (Sandbox Code Playgroud)
请注意,此行不起作用(我测试失败),因为我认为它不适用于对象列表(仅适用于数字列表等基本类型列表)。我得到一个:
First differing element 0
Run Code Online (Sandbox Code Playgroud)
以及显示第一个对象具有不同地址的细节(这当然是正常的),但这不是我想要比较的。我只想比较属性是否相等(仅供参考,属性 a、b 和 c 是“基本”类型,即字符串或数字)
元素的顺序无关紧要。因此,仅当两个列表都包含有效不同的元素(并且顺序不同)时,我才想要失败。我正在使用 Python3。
谢谢,
我不确定如何可扩展地实现eq但你可以简单地试试这个:
import unittest
class A:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def __eq__(self, other):
return self.a == other.a and self.b == other.b and self.c == other.c
a1, a2, a3 = ('a1', 'a2', 'a3')
b1, b2, b3 = ('b1', 'b2', 'b3')
c1, c2, c3 = ('c1', 'c2', 'c3')
def my_method():
return [
A(a1, b1, c1),
A(a2, b2, c2),
A(a3, b3, c3)
]
class BasicsTestCase(unittest.TestCase):
def test_list_of_objects(self):
self.assertListEqual(my_method(), [A(a1, b1, c1), A(a2, b2, c2), A(a3, b3, c3)])
Run Code Online (Sandbox Code Playgroud)
但是,如果 my_method() 中存在实际错误,我不确定解析结果是否容易,所以这只是一个快速而肮脏的解决方案......
| 归档时间: |
|
| 查看次数: |
7894 次 |
| 最近记录: |