我有一个方法,它返回一个特定类别(我们称之为类A)的对象列表,该类别具有属性a、b和c,以及方法my_method。因此,我得到了以下内容:
my_method() -> [A(a1, b1, c1), A(a2, b2, c2), A(a3, b3, c3)]
我希望对这个方法进行单元测试,但我不太清楚应该使用哪种断言方法来完成测试。
我想写出类似下面的代码:
self.assertListEqual(my_method(), [A(a1, b1, c1), A(a2, b2, c2), A(a3, b3, c3)])
注意,这行代码不起作用(测试失败),因为我认为它无法处理对象列表(仅适用于基本类型列表,如数字列表)。我收到了以下错误信息:
First differing element 0
这里有一个细节,展示了那些第一批对象有不同的地址(当然是正常的),但这不是我想要比较的。我只想比较属性是否相等(FYI,属性a,b和c是“基本”类型,即字符串或数字)。
元素的顺序不重要。所以我只想在两个列表都包含实际不同的元素时(而不是以不同的顺序相同)才会失败。我正在使用Python3。
谢谢!
set
而不是list
;此外,您没有说明A
是否实现了__eq__
(它需要__hash__
和__eq__
用于在字典和集合中使用)。 - jonrsharpe__eq__
和__hash__
方法,你会建议我用什么方法来进行单元测试? - MarAjaset(my_method()) == {A(...), ...}
- jonrsharpeassertEqual
(不需要直接使用“types”方法),但我建议使用py.test
。 - jonrsharpe