2016-03-22 35 views
1

Ben bir sınıf oluşturur kodu iki işlev ve bir alt sınıfı oluşturmak için bir atama var: The questions burada yapmışİnceleme Basit Python Sınıf

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) 

Ama çalıştıran üzerine

, bu alın hata: Ben A okumak

{"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 yüzden bunun yerine "geçersiz işlem" nin 'Geçersiz İşlem', orada hiç şans çok

Ama ben programı yüzden bu bir yazım hatasıdır sanmıyorum benim sistem IDE iyi gidiyor olmasıdır baffling çalıştı ama başka ne olabilir bilmiyorum.

ben yanlış yapıyorum ne bulmaktan yardıma ihtiyacım var. Eğer dize 'invalid transaction' ile dize '"invalid transaction"' karşılaştırarak çünkü

+5

Bu iddia, kesinlikle herhangi bir alıntı olmaksızın "Geçersiz işlem" için neredeyse her şeyi arıyor. – kindall

+1

Bu çok kötü tasarlanmış atama gibi görünüyor. Bir geri çekme durumunda "geri çekme" bir istisna getirmeli, bir dizgi döndürmemelidir. İstisnalar henüz getirilmediyse, ödev kendini * eklenmiş olan kavramlarla sınırlamalıdır. – chepner

+0

kodda girinti lütfen tamir edebilir misin? – lochsh

cevap

1

AssertionError gerçekleşiyor. İlk dizgenin ilk karakteri "; ikinci dizenin ilk karakteri i'dur.

(Bir sözdizimi hatası tırnak kaçan gibi yetiştirilmek üzere \ "Bu \" gibi beklerdik rağmen bir dize dışında geçerli değil, ancak IDE mesajı başka bir şey anlaşılacağı oluyor)

Diğer yorumcularla aynı fikirdeyim - yönteminiz için withdraw geçersiz bir işlem gerçekleşmesi durumunda istisna atmanız çok daha anlamlı olur. Birim testinizde, bu istisnanın kaldırıldığını ileri sürebilirsiniz. Eğer çerçeve unittest kullanıyorsanız

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

Sonra birim testinde, sen yöntem durum oluşturur olmadığını kontrol etmek assertRaises kullanabilirsiniz

olması gerektiği https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertRaises

: Burada

yöntem gibi görünebilir ne