Программа тестирования, у которой есть вывод PrintLn - PullRequest
0 голосов
/ 05 мая 2019

У меня возникла проблема с программой, которая печатает на стандартные выходы.Метод, который я тестирую, выводится на стандартный вывод, поэтому он имеет тип возвращаемого значения Unit.Затем я пишу Scalatest, чтобы подтвердить вывод, но я не знаю как.Я получаю такую ​​ошибку

Это вывод Scalatest

Customer 1 : 20.0
Customer 2 : 20.0
Customer 3 : 20.0
Customer 4 : 20.0
Customer 5 : 20.0

<(), the Unit value> did not equal "Customer 1 : 20.0
Customer 2 : 20.0
Customer 3 : 20.0
Customer 4 : 20.0
Customer 5 : 20.0"

Мой ассистент выглядит как

assert(output() == "Customer 1 : 20.0\nCustomer 2 : 20.0\nCustomer 3 : 20.0\nCustomer 4 : 20.0\nCustomer 5 : 20.0")

Как я могу это проверить?

1 Ответ

4 голосов
/ 05 мая 2019

Console.withOut включает временное перенаправление вывода в поток, который мы можем утверждать, например,

class OutputSpec extends FlatSpec with Matchers {
  val someStr =
    """
      |Customer 1 : 20.0
      |Customer 2 : 20.0
      |Customer 3 : 20.0
      |Customer 4 : 20.0
      |Customer 5 : 20.0
    """.stripMargin

  def output(): Unit = println(someStr)

  "Output" should "print customer information" in {
    val stream = new java.io.ByteArrayOutputStream()
    Console.withOut(stream) { output() }
    assert(stream.toString contains someStr)
  }
}
...