Ich habe eine einfache Funktion mit gets.chomp wie folgt:
%Vor% Ich möchte es mit ruby
in TestCase
suite wie folgt testen:
Das Problem ist, dass der gets.chomp
den Test abbricht, wenn ich diesen Test starte, weil der Benutzer etwas eingeben muss. Gibt es eine Möglichkeit, Benutzereingaben mit nur ruby
? Zu simulieren?
Sie trennen zuerst die zwei Anliegen der Methode:
%Vor%Und dann testest du den zweiten separat.
%Vor%Wie für die erste, Sie können
get_action
tatsächlich erhält, was der Benutzer eingibt. Obwohl dies eine praktische Antwort auf Ihr Problem ist, weiß ich nicht, wie 2. zu tun ist. Ich kann nur den Benutzer hinter dem Browser ( watir-webdriver
) imitieren und nicht hinter der Shell-Sitzung.
Sie könnten die IO-Abhängigkeit injizieren. gets
liest von STDIN
, das ist die Klasse IO
. Wenn Sie ein weiteres Objekt IO
in Ihre Klasse injizieren, können Sie StringIO
in Ihren Tests verwenden. Etwas wie das:
Tests:
%Vor%Dadurch kann Ihre Klasse mit jedem IO-Datenstrom (TTY, Datei, Netzwerk usw.) interagieren.
Um es auf der Konsole im Produktionscode zu verwenden, übergeben Sie STDIN
und STDOUT
:
Tags und Links ruby unit-testing testing shell