Scala Spark和Hadoop测试方法

Scala Spark和Hadoop测试方法,scala,testing,mockito,hdfs,scalatest,Scala,Testing,Mockito,Hdfs,Scalatest,我有一个从Hdfs读取文件的方法,并尝试测试这个方法 我第一次尝试HDFSMini集群,但没有成功。这种类型的方法是可测试的。如果是的话,测试它需要什么依赖关系,以及如何在不安装hadoop的情况下本地模拟Hdfs文件系统。hadoop安装应该没有依赖性。我不能要求所有想测试的人安装hadoop def readFiles(fs: FileSystem,path: Path): String = { val sb = new mutable.StringBuilder() var

我有一个从Hdfs读取文件的方法,并尝试测试这个方法

我第一次尝试HDFSMini集群,但没有成功。这种类型的方法是可测试的。如果是的话,测试它需要什么依赖关系,以及如何在不安装hadoop的情况下本地模拟Hdfs文件系统。hadoop安装应该没有依赖性。我不能要求所有想测试的人安装hadoop

def readFiles(fs: FileSystem,path: Path): String = {
    val sb = new mutable.StringBuilder()
    var br : BufferedReader =null
    var line : String = ""
    try{
      if(fs.exists(path)){
        if(fs.isFile(path)){
          br = new BufferedReader(new InputStreamReader(fs.open(path)))
          while ((line = br.readLine()) != null)
            sb.append(line.trim)
        } else {
          throw new InvalidPathException(s"${path.toString} is a directory, please provide the full path")
        }
      }else {
        throw new InvalidPathException(s"${path.toString} is an invalid file path ")
      }
    } catch {
      case e: Exception => throw e
    } finally {
      if (br != null){
        try {
          br.close()
        } catch {
          case e: Exception => throw e
        }
      }
    }

    sb.toString

  }
在处理org.apache.hadoop.fs.FileSystem时,Spark也是如此,我通常将测试数据文件存储在:

src/测试/资源

比如说

src/test/resources/test.txt

可由本地org.apache.hadoop.fs.FileSystem使用相对于项目根目录的路径(即src/test/resources/test.txt)访问:

test("Some test") {
  val fileSystem = FileSystem.get(new Configuration())
  val fileToRead = new Path("src/test/resources/test.txt")
  val computedContent = readFiles(fileSystem, fileToRead)
  val expectedContent = "todo"
  assert(computedContent === expectedContent)
}

如何模仿Hdfs文件系统——聪明的人说不要模仿你不拥有的东西。你可能同意还是不同意,买一些当然要考虑的东西。只需浏览一下您的代码-您到底想测试什么?@user6910411我将从文件中读取数据,并将断言与字符串进行比较。@user6910411如果我能够模拟hdfs,我可以使用dataframe reader读取数据,并验证我是否得到以下错误。无效的路径名../resources/test.txt是无效的文件路径org.apache.hadoop.fs.InvalidPathException:无效的路径名../resources/test.txt是无效的文件路径是否使用相对于测试文件的相对路径../resources/test.txt?您能否尝试在项目结构中使用项目根的相对路径绝对路径?i、 e.src/test/resources/test.txt.我将其添加为相对路径,这是错误../resources/test.txt无效路径名../resources/test.txt是无效文件路径org.apache.hadoop.fs.InvalidPathException:无效路径名../resources/test.txt是com.rxcorp.ds.utils.CommonUtils$.readfilesconoutils.scala:124I的无效文件路径意味着您可以尝试使用src/test/resources/test.txt而不是../resources/test.txt吗?其中src位于scala项目的根文件夹中,我已经以绝对路径C:/Users/XXX/Documents/Projects/XXX/XXXX/src/test/resources/test.txt运行,但是现在我得到了java.lang.NullPointerException被抛出。java.lang.NullPointerException