我如何在scala中单元测试控制台输入?

时间:2014-08-04 17:56:03

标签: scala unit-testing scalatest

如何使用scalaTest在scala中测试控制台输入。 测试代码:

object ConsoleAction {
  def readInput(in: InputStream): List[String] = {
    val bs = new BufferedSource(in)(Codec.default)
    val l = bs.getLines()
    l.takeWhile(_!="").toList
  }

  def main(args: Array[String]) {
    val l = ConsoleAction.readInput(System.in)
    println("--> "+l)
  }
}

我想测试readInput方法。 可以像这样测试一行输入:

"Result list" should "has 1 element" in {
  val input = "Hello\\n"
  val is = new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8))
  assert(ConsoleAction.readInput(is).size===1)
}

...但多线输入的方式是什么?

input line 1
input line 2

THX

1 个答案:

答案 0 :(得分:2)

您的问题在于您如何逃离换行符。你正在做" \\ n"而不是" \ n"。这个测试应该通过。

"Result list" should "has 2 elements" in {
  val input = "Hello\nWorld\n"
  val is = new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8))
  assert(ConsoleAction.readInput(is).size===2)
}