Python unittest AssertionError: 0 != []

Python unittest AssertionError: 0 != []

我是 Python unittest 的新手,我正在尝试访问此列表:

    def setUp(self):
        self.customers = [
            {"name": "Mary", "pets": [], "cash": 1000},
            {"name": "Alan", "pets": [], "cash": 50},
            {"name": "Richard", "pets": [], "cash": 100},
        ]

做这个测试:

    def test_customer_pet_count(self):
        count = get_customer_pet_count(self.customers[0])
        self.assertEqual(0, count)

我创建了这个函数:

def get_customer_pet_count(customer_number):
    if ["pets"] == 0 or ["pets"] == []:
        return 0
    return customer_number["pets"]

但我不断收到此错误: AssertionError: 0 != []

有人可以帮忙解释一下我在函数中做错了什么吗?

self.customers[0] 为空列表 []。您应该使用 len(self.customers[0]) 或像这样修改函数:

def get_customer_pet_count(customer_number):
    if customer_number == 0 or customer_number == []:
        return 0
    return customer_number

我们来看看这部分,get_customer_pet_count函数:

def get_customer_pet_count(customer_number):
    if ["pets"] == 0 or ["pets"] == []:
        return 0
    return customer_number["pets"]

首先,您传递的不是“客户编号”或索引,而是实际的客户字典。喜欢 {"name": "Mary", "pets": [], "cash": 1000}.

其次,这个比较:["pets"] == 0 检查“如果一个列表有一个元素,字符串 'pets',等于数字 0”。这永远不可能是真的。列表永远不会 等于 一个数字。*

下一个比较["pets"] == [] 是检查“如果列表只有一个元素,则字符串'pets' 等于一个空列表”。这也永远不会是真的。空列表不能等于 non-empty 列表。

如果写成def get_customer_pet_count(customer):可能会更清楚。您正在向它传递带有客户 info 的字典,而不是客户 number。另外,你的函数说 pet_count 所以它应该是宠物列表的 长度 :

def get_customer_pet_count(customer):
    return len(customer["pets"])

*忽略 user-defined 伪装该行为的类型。