Python OOP练习BankAccount类方法测试出现AssertionError求解决
问题原因
- 核心错误是你定义的
deposit()、withdraw()、transfer()三个方法都没有显式的return语句,Python中所有没有指定返回值的函数/方法,默认都会返回None。你测试代码里直接将这三个方法的调用结果赋值给变量,再和预期的数值对比,自然会出现None和数值不匹配的AssertionError。 - 次要问题是你的测试逻辑不符合方法的设计定位:这三个方法是用来修改账户余额的状态方法,不需要返回操作金额,你应该在每次操作后调用
get_balance()获取当前余额验证是否符合预期,而不是验证方法的返回值。
修复方案
你可以任选以下两种方案之一修改:
方案1:调整测试逻辑(推荐,符合常规设计)
常规的账户操作方法不需要返回操作金额,直接修改实例属性即可,只需要修改测试部分的校验逻辑:
def test_BankBankAccount(): test_account = BankAccount("Dude", "man", "1234", 0) test_account2 = BankAccount("Dude2", "man2","5678", 0) # 验证存款 test_account.deposit(400) assert test_account.get_balance() == 400, f"存款后余额应为400,实际为{test_account.get_balance()}" # 验证转账 test_account.transfer(test_account2, 200) assert test_account.get_balance() == 200, f"转出200后余额应为200,实际为{test_account.get_balance()}" assert test_account2.get_balance() == 200, f"转入200后余额应为200,实际为{test_account2.get_balance()}" # 验证取款 test_account.withdraw(200) assert test_account.get_balance() == 0, f"取款200后余额应为0,实际为{test_account.get_balance()}"
方案2:给三个方法添加return语句
如果你确实需要方法返回操作的金额,就修改类中的三个方法:
def deposit(self, amount): self._balance += amount return amount def withdraw(self, amount): self._balance -= amount return amount def transfer(self,other_account, transfer_amount): self.withdraw(transfer_amount) other_account.deposit(transfer_amount) return transfer_amount
修改后你原来的测试代码就能正常运行,不过这种设计并不常见,一般状态修改方法不需要返回操作参数。
内容的提问来源于stack exchange,提问作者fredericoamigo
相关产品推荐
相关产品推荐

