I’m new to Python unittest and I’m trying to access this list:
def setUp(self): self.customers = [ {"name": "Mary", "pets": [], "cash": 1000}, {"name": "Alan", "pets": [], "cash": 50}, {"name": "Richard", "pets": [], "cash": 100}, ]
to do this test:
def test_customer_pet_count(self): count = get_customer_pet_count(self.customers[0]) self.assertEqual(0, count)
I’ve created this function:
def get_customer_pet_count(customer_number): if ["pets"] == 0 or ["pets"] == []: return 0 return customer_number["pets"]
But I keep getting this error:
AssertionError: 0 != []
Can someone help explain what I’m doing wrong in the function please?
Advertisement
Answer
Let’s take a look at this part, the get_customer_pet_count
function:
def get_customer_pet_count(customer_number): if ["pets"] == 0 or ["pets"] == []: return 0 return customer_number["pets"]
First, you’re not passing it a “customer number” or index, you’re passing it the actual customer dictionary. Like {"name": "Mary", "pets": [], "cash": 1000}
.
Second, this comparison: ["pets"] == 0
checks “if a list with one element, the string ‘pets’, is equal to the number 0”. This can never be true. A list will never be equal to a number.*
The next comparison ["pets"] == []
is checking “if the list with one element, the string ‘pets’ is equal to an empty list”. That can also never be true. An empty list cannot be equal to a non-empty list.
If you wrote it as def get_customer_pet_count(customer):
then it might be clearer. You’re passing it the dictionary with the customer info, not the customer number. Also, your function says pet_count
so it should be the length of the pets list:
def get_customer_pet_count(customer): return len(customer["pets"])
*Ignoring user-defined types faking that behaviour.