【发布时间】:2016-06-06 17:28:08
【问题描述】:
我已经为自学在线 Python 课程编程了 3 周。目标是扩展一个基本的 BankAccount 类,您可以通过子类 MinimumBalanceAccount 尽可能多地取款,其中过多的取款被拒绝。这是我目前所拥有的:
class BankAccount:
def __init__(self, balance):
self.balance = balance
def deposit(self, amount):
self.balance += amount
return self.balance
def withdraw(self, amount):
if(amount > self.balance):
print "invalid transaction."
else:
self.balance -= amount
return self.balance
class MinimumBalanceAccount(BankAccount):
def __init__(self, minimum_balance):
BankAccount.__init__(self, self.balance)
self.minimum_balance = minimum_balance
def withdraw(self, amount):
if(self.balance - amount < self.minimum_balance):
print "Minimum balance exceeded."
else:
self.balance -= amount
return self.balance
由于在线课程具有在线单元测试功能,我从练习定义中编写了以下单元测试:
import unittest
class AccountBalanceTestCases(unittest.TestCase):
def setUp(self):
self.my_account = BankAccount(90)
# omitting tests that pass ok...
def test_invalid_operation(self):
self.assertEqual(self.my_account.withdraw(1000), "invalid transaction", msg='Invalid transaction')
unittest.main(verbosity=2)
测试有望通过,但是:
$ python bank2.py
test_invalid_operation (__main__.AccountBalanceTestCases) ... invalid transaction.
FAIL
======================================================================
FAIL: test_invalid_operation (__main__.AccountBalanceTestCases)
----------------------------------------------------------------------
Traceback (most recent call last):
File "bank2.py", line 36, in test_invalid_operation
self.assertEqual(self.my_account.withdraw(1000), "invalid transaction", msg='Invalid transaction')
AssertionError: Invalid transaction
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)
$
我做错了什么?
【问题讨论】:
-
究竟是什么没有通过?
-
请注意,一个明显的错误是您的提款方法不会返回无效的交易消息,因为指令和您的测试状态都会打印出来。
-
它告诉我运行你的代码时出错。
-
不,它没有。运行单元测试的重点是它会在断言失败时为您提供消息。那么,哪些断言失败了?你得到了什么错误?是什么让您认为单元测试是“错误的”?
-
所以我猜测您正在使用某种在线标记工具。这一切都很好,但是您需要先在本地运行您的代码;如果你这样做了,你会看到失败测试的细节,如 flaschbier 所示。
标签: python class unit-testing