【发布时间】:2021-03-02 09:04:39
【问题描述】:
我正在比较两个类实例。以下是我的示例测试代码:
from unittest import TestCase
class Dog:
age: int
name: str
def __eq__(self, other):
if not isinstance(other, Dog):
return False
return self.age == other.age and self.name == other.name
class MyTests(TestCase):
def test_compare(self):
d1 = Dog()
d1.age = 1
d1.name = 'dog1'
d2 = Dog()
d2.age = 2
d2.name = 'dog2'
self.assertEqual(d1, d2)
这会产生一个断言错误:
AssertionError: <test.Dog object at 0x0000020444FCA520> != <test.Dog object at 0x0000020444F97D60>
有没有办法直接比较两个实例并获得更有用的错误消息,例如导致断言失败的字段?我发现的唯一方法是直接比较字段,如下所示。有没有不那么繁琐的方法?
self.assertEqual(d1.age, d2.age)
self.assertEqual(d1.name, d2.name)
【问题讨论】:
-
@manveti 不,我认为这不是我要找的东西,但无论如何感谢您的分享!
-
我想你会发现如果你实现 str 和 repr,你会得到更好的消息,也许使用数据类。
-
@BrianMcCutchon 在看到下面 Jack Taylor 的回答中的代码后,我认为它毕竟与我正在寻找的东西有关!
-
@manveti 看到下面杰克泰勒的回答,它确实回答了我的问题!谢谢你的链接!
-
另外,使用 pytest 通常会比内置的 unittest 模块提供更多有用的错误消息。
标签: python unit-testing equality assertion error-messaging