Ihre App benötigt eine object
mit main
Methode, die Array[String]
als Parameter verwendet. Es sieht aus wie dieses
object Main extends App {
print("hi, " + args(0))
}
oder ähnliche
object Main {
def main(args: Array[String]) = print("hi, " + args(0))
}
Auf jeden Fall haben Sie auf jeden Fall diese Art von Einstiegspunkt, wenn Sie > run "my arg"
in sbt tun können.
Es ist nur ein object
mit einer Methode namens main
, die Sie anrufen können, wo immer Sie wollen. Importieren Sie es einfach und verwenden Sie:
Main.main(Array("my arg"))
, die den Text auf der Konsole bei der Ausführung gedruckt werden würde. Wir müssen die Konsolenausgabe zu einem anderen Stream umleiten, um sie überprüfen zu können.
Antwort Verwendung von Redirect stdout in another thread können Sie mit so etwas wie diese kommen:
val baos = new ByteArrayOutputStream
val ps = new PrintStream(baos)
Console.withOut(ps)(Main.main(Array("my arg")))
val output = baos.toString
Und Sie können alle Arten von Tests auf output
Wert tun
Sie können dann eine Hilfsmethode erstellen, dies zu handhaben für Sie
def outputFor(args: String*): String = {
val baos = new ByteArrayOutputStream
val ps = new PrintStream(baos)
Console.withOut(ps)(Main.main(args.toArray))
baos.toString
}
Und dann testen easly App
"My app" should "greet me" {
outputFor("harryg") shouldBe "hi, harryg"
}
Nur um zu verdeutlichen, die ganze Lösung hat nichts mit sbt
selbst zu tun, nennen wir das Programm direkt in einer ähnlichen Weise, dass sbt es tun würde.
Sie können Ihre Antwort hier finden: http://stackoverflow.com/questions/16380699/redirect-stdout-in-another-thread –
Danke, aber ich verstehe das nicht - wie rufe ich 'main()' während man sich streitet? – harryg