[英]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.