繁体   English   中英

使用Scala和SBT对文件阅读器进行编写单元测试

[英]Writing Unit Tests of file readers with Scala and SBT

我需要编写一个单元测试,以从多个文件中读取行,对其进行解析并创建所需的对象。 使用sbt运行测试时,它说没有服务器启动:

RuntimeException: There is no started application (Play.scala:46)

尝试使用文件读取器操作时会出现问题,例如:

scala.io.Source.fromFile(filePath)

并且编译器期望某些东西被嘲笑。

我应该如何解决此问题,我应该制定一种方法来读取文件并将其转换为字符串,然后测试解析方法本身吗? 但是然后我将不得不为fileReader创建一个测试,有什么建议吗?

这是软件开发中的一个常见问题,即如何简单地模拟外部依赖性。 通常,一种好方法是用最少的代码包装所有外部调用(这样就不会有很多bug),然后进行模拟。

在您的情况下,您可以执行以下操作:

class FileHandler {
  def getFile(filePath: String) = {
    val src = Source.fromFile(filePath)
    val lines = src.getLines()
    // Just to have some resource management and close resources after they have been read.
    new Iterator[String] {
      def hasNext: Boolean = {
        if(!lines.hasNext) Try { src.close() }
        lines.hasNext
      }
      def next(): String = lines.next()
    }
  }
  // Other stuff you would want to do
  def saveFile(....) = ???
}

现在我们可以模拟一下:

val fileHandler = mock[FileHandler]
val iterator = Seq("line1", "line2", "line3").toIterator
fileHandler.getFile("/some/file/path") returns iterator

这使您可以完全控制什么路径返回什么内容,而省去整个文件处理部分。 这不是一件容易的事,所以我想阅读其他答案,以解决这个问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM