Можно ли протестировать функцию возвращаемого типа Unit с помощью теста Scala? Если да, дайте мне ответ. Мне нужно, чтобы покрытие кода было выше.

-2
Ishwar Patel 2 Сен 2020 в 14:05

2 ответа

Лучший ответ

Следующий тест утверждает, что Hello, World печатается на консоли.


type ConsoleErrors  = List[String]
type ConsoleOutputs = List[String]
test("should print hello world to console") {

  def toString(arr: Array[Byte]): List[String] = new String(arr).split("\n").toList.filter(!_.isEmpty)

  def captureConsole[T](f: => T): (T, ConsoleOutputs, ConsoleErrors) = {
    val outCapture = new ByteArrayOutputStream
    val errCapture = new ByteArrayOutputStream
    try {
      val t                   = Console.withOut(outCapture)(Console.withErr(errCapture)(f))
      val out: ConsoleOutputs = toString(outCapture.toByteArray)
      val errs: ConsoleErrors = toString(errCapture.toByteArray)
      (t, out, errs)
    }
    finally {
      outCapture.reset()
      errCapture.reset()
    }
  }

  val (_, out, errs) = captureConsole {
    println("Hello")
    println("World")
  }

  out shouldBe List("Hello", "World")
  errs shouldBe List.empty
}

0
Pritam Kadam 2 Сен 2020 в 17:00

Предположительно, функция, возвращающая Unit, имеет побочные эффекты, поэтому вам следует проверить их.

2
Ryan Scheidter 2 Сен 2020 в 12:57