Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AssertListQual,不更改类的方法_Python_Python Unittest - Fatal编程技术网

Python AssertListQual,不更改类的方法

Python AssertListQual,不更改类的方法,python,python-unittest,Python,Python Unittest,假设我有以下代码 class MyClass(object): def __init__(self, val1, val2): self.attr1 = val1 self.attr2 = val2 class MySecondClass(object): def __init__(self): self.my_list = [] def add_to_list(self, val1, val2): se

假设我有以下代码

class MyClass(object):
    def __init__(self, val1, val2):
        self.attr1 = val1
        self.attr2 = val2

class MySecondClass(object):
    def __init__(self):
        self.my_list = []

    def add_to_list(self, val1, val2):
        self.my_list.append(MyClass(val1, val2))
以及下面的单元测试代码

import unittest

def myclass_equality(inst1, inst2, msg=None):
    val1_matches = inst1.val1 == inst2.val1
    val2_matches = inst1.val2 == inst2.val2
    if not val1_matches or not val2_matches:
        raise unittest.TestCase.failureException(msg)

class ListTests(unittest.TestCase):
    def __init__(self, *args, **kwargs):
        super(ListTests, self).__init__(*args, **kwargs)
        self.addTypeEqualityFunc(MyClass, myclass_equality)

    def setUp(self):
        self.second = MySecondClass()

    def test_adding_to_list(self):
        val1, val2 = 1, 2
        self.second.add_to_list(val1, val2)
        my_other_list = [(MyClass(val1, val2))]
        self.assertListEqual(self.second.my_list, my_other_list)
但是,断言失败,因为AssertListQual方法将对象与可以看到的“==”进行比较,而不是与我定义的方法进行比较,如果我在两个MyClass实例上调用assertEqual,就会调用该方法

有什么解决办法吗?因为我不需要也不想为我的类定义_eq _;方法


为什么AssertListQual与“==”比较而不是AssertQual?

您可以在循环中执行此操作,或者为您的
myclass\u equality
函数创建另一个循环包装器吗?我觉得我错过了什么

例如:


在代码中,您调用assertItemsEqual,但随后提到AssertListQual。这是一个打字错误吗?是的,很抱歉我正在解决这个问题(虽然是同一个问题)。你是说最后一行的MyClass而不是MySecondClass?似乎已经有一些关于这个的讨论。嗯,我明白了。非常感谢。也许我可以用。但是用更复杂的东西?如果我想避免重复?毕竟,已经有一些东西几乎满足了我的需求,所以我想我应该问一下。但是你是对的,可以这样做。为了使它干燥,你可以将该逻辑放入
myclass\u equality
的列表版本中。如果您不想实现
\uuuuu eq\uuuu
,那么您基本上需要对用户“导入此”或包装
TestCase.assertSequenceEqual
链接的问题进行错误修复,以便在执行标准比较之前,在序列包含对象类型时执行自定义比较。
def test_adding_to_list(self):
    val1, val2 = 1, 2
    self.second.add_to_list(val1, val2)
    my_other_list = [(MyClass(val1, val2))]
    for i, (a, b) in enumerate(zip(self.second.my_list, my_other_list)):
        myclass_equality(a, b, msg='Adding to list failed on element {}:{}!={}'.format(i, a, b)