【问题标题】:How can i unit test console input in scala?如何在 scala 中对控制台输入进行单元测试?
【发布时间】:2014-08-05 02:57:36
【问题描述】:

如何使用 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

谢谢

【问题讨论】:

  • 嗯...在input 变量中有多行有什么问题?例如val input = "foo\nbar\n"

标签: scala unit-testing scalatest


【解决方案1】:

您的问题在于您如何转义换行符。你正在做“\\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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2012-06-16
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    相关资源
    最近更新 更多