Python 对复杂对象重复使用pytest断言逻辑

Python 对复杂对象重复使用pytest断言逻辑,python,pytest,Python,Pytest,如何对对象重用python“智能”报告 例如: 我想要的是获得断言报告,就像我断言基本字段一样,例如(当然,不打印满足比较运算符的属性并将失败的属性报告连接在一起是有意义的)。比如: def test_magic(): > assert Foo(text='a', sequence=[1]) == Foo(text='a', sequence=[1, 2]) E assert Foo(text='a', sequence=[1]) == Foo(text='

如何对对象重用python“智能”报告

例如:

我想要的是获得断言报告,就像我断言基本字段一样,例如(当然,不打印满足比较运算符的属性并将失败的属性报告连接在一起是有意义的)。比如:

    def test_magic():
>       assert Foo(text='a', sequence=[1]) == Foo(text='a', sequence=[1, 2])
E       assert Foo(text='a', sequence=[1]) == Foo(text='a', sequence=[1, 2])
E           attribute `sequence`:
E              [1] == [1, 2]
E              Right contains more items, first extra item: 2
E        Use -v to get the full diff

我可以通过编写一些插件等并调用内部比较器来实现这一点吗?或者,推荐的解决方案是什么

我不太明白。如果您尝试编写的代码:assert'a'='a'assert[0,1]!=[0]断言[1,2]==[1,3]如果需要,您将在AssertionError中有一个:回溯(最近一次调用):文件“”,第3行。您可以定义一个函数来检查断言。如果尝试内部构造而不是类,则没有什么区别。在python中,一切都是一个对象。@Dr.Raghnar我不明白你的意思,如果我显式地编写它,它就会工作;然而,问题的关键是不必显式地编写它,而是使:assert Foo(text='a',sequence=[1])!=Foo(text='a',sequence=[1,2])就是这样工作的;是的,我不想为它编写一个用户记得调用的函数,我不确定是否理解。如果您尝试编写的代码:assert'a'='a'assert[0,1]!=[0]断言[1,2]==[1,3]如果需要,您将在AssertionError中有一个:回溯(最近一次调用):文件“”,第3行。您可以定义一个函数来检查断言。如果尝试内部构造而不是类,则没有什么区别。在python中,一切都是一个对象。@Dr.Raghnar我不明白你的意思,如果我显式地编写它,它就会工作;然而,问题的关键是不必显式地编写它,而是使:assert Foo(text='a',sequence=[1])!=Foo(text='a',sequence=[1,2])就是这样工作的;是的,我不想为它编写一个函数,然后用户会记得调用它
    def test_magic():
>       assert Foo(text='a', sequence=[1]) == Foo(text='a', sequence=[1, 2])
E       assert Foo(text='a', sequence=[1]) == Foo(text='a', sequence=[1, 2])
E           attribute `sequence`:
E              [1] == [1, 2]
E              Right contains more items, first extra item: 2
E        Use -v to get the full diff