Я пишу интерпретатор UCI в качестве конечного автомата Akka. В соответствии со спецификацией интерпретатор должен записывать свои выходные данные в stdout
и получать входные данные из stdin
.
У меня есть тестовый костюм для актера, и я могу проверить некоторые аспекты (связанные с сообщениями) его поведения, но я не знаю, как захватить stdout
, чтобы сделать утверждения, и как отправить ему ввод через stdin
. Я изучил API-интерфейс scalatest в меру своих возможностей, но не могу найти, как добиться того, что мне нужно.
Это текущий тестовый класс:
package org.chess
import akka.actor.ActorSystem
import akka.testkit.{TestKit, TestProbe}
import org.chess.Keyword.Quit
import org.scalatest.wordspec.AnyWordSpecLike
import org.scalatest.{BeforeAndAfterAll, Matchers}
import scala.concurrent.duration._
import scala.language.postfixOps
class UCIInterpreterSpec(_system: ActorSystem)
extends TestKit(_system)
with Matchers
with AnyWordSpecLike
with BeforeAndAfterAll {
def this() = this(ActorSystem("UCIInterpreterSpec"))
override def afterAll: Unit = {
super.afterAll()
shutdown(system)
}
"A UCI interpreter" should {
"be able to quit" in {
val testProbe = TestProbe()
val interpreter = system.actorOf(UCIInterpreter.props)
testProbe watch interpreter
interpreter ! Command(Quit, Nil)
testProbe.expectTerminated(interpreter, 3 seconds)
}
}
}
Конечно, знать, что интерпретатор может выйти, полезно... но не очень полезно. Мне нужно проверить, например, если отправить строку isready
интерпретатору, он вернет readyok
.
Возможно ли, что я слишком усложняю тест, используя akka.testkit вместо более простого фреймворка? Я хотел бы продолжать использовать единую среду тестирования для простоты, и мне нужно будет протестировать многие другие элементы системы, связанные с актерами, поэтому, если бы это можно было решить, не выходя из домена akka-testkit/scalest, это было бы фантастически.
Любая помощь будет оценена. Заранее спасибо.
uci-implementation
) . Я еще не определил лицензию, но, конечно, она будет с открытым исходным кодом. - person Bruno Unna   schedule 03.07.2019