Ich habe ein Befehlszeilentool entwickelt, das bei bestimmten Eingaben System.exit()
( möchte keine Ausnahmen anstelle von verwenden).
Ich kenne Java: Wie man Methoden testet Rufen Sie System.exit ()? auf und es ist der eleganteste Ansatz .
Leider ist es nicht rein genug, da ich die Abhängigkeiten zu Systemregeln hinzufügen musste, junit-schnittstelle
Gibt es ein allgemeines Muster für den Umgang mit System.exit
in specs2 , das reiner ist als mein aktueller Ansatz, bei dem specs2 nicht verwendet wird?
Wenn Sie wirklich mit einer Methode arbeiten möchten, die System.exit()
verwendet, ist der einfachste Weg, es zu testen, Ihr SecurityManager
durch einen zu ersetzen, der ein ExitException
(subclassing SecurityException
) wirft, wenn System.exit()
wird aufgerufen:
class SystemExitSpec
%Vor%test ConverterSpec
%Vor% Erste Option: Verwenden Sie eine Ausnahme anstelle von System.exit
.
Zweite Option: Rufen Sie die Anwendung in einem separaten Thread auf und überprüfen Sie die Rückgabecodes.
Dritte Option: mock System.exit
. Es gibt viele Möglichkeiten das zu tun, erwähnte ist ziemlich gut.
Es gibt jedoch kein specs2
-spezifisches Muster, um mit System.exit
zu arbeiten. Persönlich würde ich erste oder zweite Optionen vorschlagen.
Tags und Links scala unit-testing sbt specs2 testability