2017-12-01 3 views
0

das ist mein Geld Klasse

class Money 
    def initialize 
    @amount = 0 
    end 

    def amount 
    @amount 
    end 

    def earn(this_many) 
    @amount += this_many 
    end 

    def spend(this_many) 
    @amount -= this_many 
    end 

end 

mein Versagen Test

def test_cant_spend_money_that_you_dont_have 
    money = Money.new 
    money.earn(75) 
    money.spend(75) 
    assert_equal "You can't spend what you don't have", money.spend(12) 
    assert_equal 0, money.amount 
    end 

Ich bin nicht sicher, wie die Menge Methode zu ändern, um Machen Sie den Test bestanden ... jede Hilfe wird geschätzt.Wie dieses Testdurchlauf zu machen, ich bin ein bisschen verwirrt

+0

mein Code bis zu dieser Linie arbeitet sein ... assert_equal „Man kann nicht ausgeben, was Sie nicht haben“, money.spend (12) dieses ist ein Test von exercism.io Ich versuche, es passieren zu lassen, aber ich stecke fest ... Ich habe versucht, eine totale Methode zu machen, aber ich habe alles kaputt gemacht. –

Antwort

2

Sie ändern müssen, sollten Fehler erhöhen, wenn das Konto nicht genug Geld hat, zu verbringen.

class Money 
    class InsufficientFunds < StandardError; end 

    attr_accessor :amount 

    def initialize 
    self.amount = 0 
    end 

    def earn(this_many) 
    self.amount += this_many 
    end 

    def spend(this_many) 
    raise InsufficientFunds, "You can't spend what you don't have" if amount < this_many 
    self.amount -= this_many 
    end 

end 

Und Ihr Testfall sollte

def test_cant_spend_money_that_you_dont_have 
    money = Money.new 
    money.earn(75) 
    money.spend(75) 
    assert_raise Money::InsufficientFunds, "You can't spend what you don't have" do 
    money.spend(12) 
    end 
    assert_equal 0, money.amount 
end 
+0

danke !! so viel .. ich versuchte etwas ähnliches, aber nicht verwenden raise –

+0

Meiner Meinung nach sollte eine Methode nie verschiedene Arten von Werten zurückgeben (außer 'nil'). Dein 'Money # spend' sollte immer eine Nummer zurückgeben, niemals eine Zeichenkette. Dies ist eine typische Situation, die Fehler verwendet. – Aetherus

+0

Randbemerkung der Fehler sollte wahrscheinlich abstrahiert werden in etwas wie 'class InsufficientFunds engineersmnky

0

Ich glaube, Sie

assert_equal "You can't spend what you don't have", money.spend(12) 

zu

money.spend(12) 
assert money.amount > 0, "You can't spend what you don't have" 
+1

Das scheint nicht genau zu sein und ich habe Schwierigkeiten, der Logik zu folgen weil du keine Erklärung für deine Argumentation angeboten hast – engineersmnky

Verwandte Themen