Die Aufgabe lautete: "Test Janken's Programm mit test / unit." Ich habe den Testcode selbst zum ersten Mal gehört, also werde ich ihn als mein eigenes Memo schreiben. Die Betriebsumgebung ist wie folgt.
mac Ruby 2.6.5 test/unit 3.3.6
Testen Sie Janken's Programm mit "test / unit".
Erstens ist der Testcode ein Programm, um zu überprüfen, ob die Logik des geschriebenen Programms wie erwartet funktioniert.
test / unit ist ein Testframework für Ruby, und es scheint, dass es ursprünglich als Standard installiert wurde. Informationen zur Installation von tesu / unit selbst finden Sie unter hier.
Bitte beachten Sie, dass dies je nach Version geringfügig unterschiedlich ist. Die grundlegende Syntax lautet wie folgt.
require 'test/unit'
Klasse [Klassenname] <Test :: Unit :: TestCase
end
Erstens "erfordern" Test / Einheit ", um dieses Framework zu verwenden.
Erstellen Sie als Nächstes eine Klasse, die Test :: Unit :: TestCase
erbt.
In Ruby wird die Klasse zu einer Testausführungsdatei, indem Test :: Unit :: TestCase
geerbt wird.
require 'test/unit'
Klasse [Klassenname] <Test :: Unit :: TestCase
def test_ [Methodenname]
foo = "hoge"
assert_equal("hoge", foo)
end
end
Der Testprozess ist wie oben.
Erstellen Sie eine Methode und schreiben Sie dort das Programm, das Sie testen möchten. Die Regel ist, dass der Methodenname mit test_
beginnt. Schreiben Sie bei dieser Methode die Prüfmethode im folgenden Format. (Es gibt andere Prüfmethoden)
assert_equal (angenommener Wert, Variablen, Methoden usw.)
assert_equal
stellt sicher, dass der Wert der Variablen und der Rückgabewert der Methode Ihren Erwartungen entsprechen.
Dies ist das Ende des kurzen Tutorials. Standardmäßig stehen jedoch weitere Methoden zur Verfügung. Lesen Sie daher die Referenz.
Dann wird die Lösung der Leistungsbedingung unten beschrieben. Zunächst werde ich das Janken-Programm schreiben. (Es ist kein sehr kluges Programm, aber bitte vergib mir) Wenn Sie g, c oder p als Standardeingabe eingeben, wird das Ergebnis von Janken ausgegeben.
player = gets.chomp
if player == "g"
player = "goo"
elsif player == "c"
player = "choki"
elsif player == "p"
player = "par"
end
com = rand(3)
if com == 0
com = "goo"
elsif com == 1
com = "choki"
else
com = "par"
end
if player == com
res = "zeichnen"
elsif (player == "Schmiere" && com == "Choki") || (player == "Choki" && com == "Par") || (player == "Par" && com == "Schmiere")
res = "Du gewinnst"
else
res = "Du verlierst"
end
setzt "Du bist # {Spieler}, ich bin # {com}, # {res}."
In diesem Fall testen wir, ob das richtige Ergebnis angezeigt wird, wenn die Werte der beiden Variablen "player" und "com" festgelegt werden. Daher wird der folgende Teil getestet.
if player == com
res = "zeichnen"
elsif (player == "Schmiere" && com == "Choki") || (player == "Choki" && com == "Par") || (player == "Par" && com == "Schmiere")
res = "Du gewinnst"
else
res = "Du verlierst"
end
setzt "Du bist # {Spieler}, ich bin # {com}, # {res}."
Dieses Mal werden wir den obigen Prozess zur Bestimmung des Sieges oder der Niederlage in einer Klasse zusammenfassen.
class Janken
def self.judge(player,com)
if player == com
res = "zeichnen"
elsif (player == "Schmiere" && com == "Choki") || (player == "Choki" && com == "Par") || (player == "Par" && com == "Schmiere")
res = "Du gewinnst"
else
res = "Du verlierst"
end
return "Du bist # {Spieler}, ich bin # {com}, # {res}."
end
end
Der Prozess des Gewinnens und Verlierens von Janken ist in der Klasse zusammengefasst. Schreiben Sie dann den Testprozess.
require 'test/unit'
class Test_Janken < Test::Unit::TestCase
def test_janken
assert_equal ('Du bist gut, ich bin gut, zeichne.', Janken.judge ("gut", "gut"))
assert_equal ('Du bist Choki, ich bin Choki, zeichne.', Janken.judge ("Choki", "Choki"))
assert_equal ('Du bist par, ich bin par, zeichne.', Janken.judge ("par", "par"))
assert_equal ('Du bist goo, ich bin choki, du gewinnst.', Janken.judge ("goo", "choki"))
assert_equal ('Du bist Choki, ich bin par, du gewinnst.', Janken.judge ("choki", "par"))
assert_equal ('Du bist par, ich bin goo, du gewinnst.', Janken.judge ("par", "goo"))
assert_equal ('Du bist gut, ich bin par, du verlierst.', Janken.judge ("goo", "par"))
assert_equal ('Du bist Choki, ich bin goo, du verlierst.', Janken.judge ("choki", "goo"))
assert_equal ('Du bist par, ich bin choki, du verlierst.', Janken.judge ("par", "choki"))
end
end
Es ist wie das Überprüfen aller 9 Muster des Gewinnens und Verlierens von Janken mit assert_equal
.
Dies wird mit Jankens Verarbeitung kombiniert.
Der folgende Code ist der letzte.
require 'test/unit'
class Janken
def self.judge(player,com)
if player == com
res = "zeichnen"
elsif (player == "Schmiere" && com == "Choki") || (player == "Choki" && com == "Par") || (player == "Par" && com == "Schmiere")
res = "Du gewinnst"
else
res = "Du verlierst"
end
return "Du bist # {Spieler}, ich bin # {com}, # {res}."
end
end
class Test_Janken < Test::Unit::TestCase
def test_janken
assert_equal ('Du bist gut, ich bin gut, zeichne.', Janken.judge ("gut", "gut"))
assert_equal ('Du bist Choki, ich bin Choki, zeichne.', Janken.judge ("Choki", "Choki"))
assert_equal ('Du bist par, ich bin par, zeichne.', Janken.judge ("par", "par"))
assert_equal ('Du bist goo, ich bin choki, du gewinnst.', Janken.judge ("goo", "choki"))
assert_equal ('Du bist Choki, ich bin par, du gewinnst.', Janken.judge ("choki", "par"))
assert_equal ('Du bist par, ich bin goo, du gewinnst.', Janken.judge ("par", "goo"))
assert_equal ('Du bist gut, ich bin par, du verlierst.', Janken.judge ("goo", "par"))
assert_equal ('Du bist Choki, ich bin goo, du verlierst.', Janken.judge ("choki", "goo"))
assert_equal ('Du bist par, ich bin choki, du verlierst.', Janken.judge ("par", "choki"))
end
end
Ergebnis ist ,,.
Loaded suite test
Started
.
Finished in 0.000811 seconds.
--------------------------------------------------------------------------------
1 tests, 9 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
--------------------------------------------------------------------------------
1233.05 tests/s, 11097.41 assertions/s
Ich konnte ohne Probleme testen.
Test- / Einheitenbibliothek --doc.ruby-lang.org
Verwendung des Standard-Unit-Test-Brain-Juice-Portals von Ruby