2016-03-22 3 views
1

У меня есть задание, чтобы создать код, который создает класс, две функции и подкласс: The questionsОбзор Простой Python класс

Что я сделал здесь

class BankAccount: 

def __init__(self, startBal): 
    self.balance = startBal 

def deposit(self, amt): 
    self.balance = self.balance + amt 

def withdraw(self, amt): 
    if amt > self.balance: 
    return ('"invalid transaction"') 
    else: 
    self.balance = self.balance - amt 

class MinimumBalanceAccount(BankAccount): 

def __init__(self, bal): 
    super(MinimumAccountBalance, self).__init(bal) 

Но на бег, я получаю это ошибка:

{"finished": true, "success": [{"fullName": "test_balance", "passedSpecNumber": 1}, {"fullName": "test_deposit", "passedSpecNumber": 2}, {"fullName": "test_sub_class", "passedSpecNumber": 3}, {"fullName": "test_withdraw", "passedSpecNumber": 4}, {"fullName": "test_balance", "passedSpecNumber": 5}, {"fullName": "test_deposit", "passedSpecNumber": 6}, {"fullName": "test_sub_class", "passedSpecNumber": 7}, {"fullName": "test_withdraw", "passedSpecNumber": 8}], "passed": false, "started": true, "failures": [{"failedSpecNumber": 1, "fullName": "test_invalid_operation", "failedExpectations": [{"message": "Failure in line 47, in test_invalid_operation\n self.assertEqual(self.my_account.withdraw(1000), \"invalid transaction\", msg='Invalid transaction')\nAssertionError: Invalid transaction\n"}]}, {"failedSpecNumber": 2, "fullName": "test_invalid_operation", "failedExpectations": [{"message": "Failure in line 23, in test_invalid_operation\n self.assertEqual(self.my_account.withdraw(1000), \"invalid transaction\", msg='Invalid transaction')\nAssertionError: Invalid transaction\n"}]}], "specs": {"count": 10, "pendingCount": 0, "time": "0.000052"}} 
    "invalid transaction" 
    "invalid transaction" 

Error msg

Я прочитал на А ssetionError, поэтому я попробовал «Invalid Transaction» вместо «недействительной транзакции», тоже не повезло

Но меня озадачило то, что программа, похоже, отлично работает в моей системной IDE, поэтому я не думаю, что это синтаксическая ошибка, но Я не знаю, что еще может быть.

Мне нужна помощь в выяснении того, что я делаю неправильно.

+5

Это утверждение почти наверняка ищет «Недействительные транзакции» без кавычек вообще. – kindall

+1

Это похоже на очень плохо разработанное задание. 'отзыв' должен вызывать исключение, а не возвращать строку, в случае овердрафта. И если исключения еще не введены, то задание должно ограничиваться концепциями, которые * были введены. – chepner

+0

Можете ли вы исправить отступы в коде, пожалуйста? – lochsh

ответ

1

AssertionError происходит потому, что вы сравниваете строку '"invalid transaction"' со строкой 'invalid transaction'. Первый символ первой строки: "; первый символ второй строки - i.

(Хотя я ожидал бы синтаксическая ошибка будет поднят, так как избежать кавычки \ «как этот \» вне строки не является допустимым, но сообщение от вашего IDE предлагает что-то еще происходит)

Я согласен с другими комментаторами - для вашего метода withdraw было бы более разумным, если бы возникла недопустимая транзакция. В своем модульном тесте вы можете утверждать, что это исключение возбуждено.

Вот что метод может выглядеть следующим образом:

def withdraw(self, amt): 
    if amt > self.balance: 
     raise ValueError('Invalid transaction') 
    else: 
     self.balance = self.balance - amt 

Затем в тестовом модуле, если вы используете UnitTest рамки, вы можете использовать assertRaises, чтобы проверить, что метод вызывает исключение, когда он должен https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertRaises

Смежные вопросы