我想运行单元测试,但我需要一个org.apache.hadoop.fs.FileSystem实例.是否有任何模拟或任何其他解决方案来创建FileSystem?
如果您正在使用hadoop 2.0.0及更高版本 - 请考虑使用hadoop-minicluster
org.apache.hadoop hadoop-minicluster 2.5.0 test
有了它,您可以在本地计算机上创建临时hdfs,并在其上运行测试.setUp方法可能如下所示:
baseDir = Files.createTempDirectory("test_hdfs").toFile().getAbsoluteFile(); Configuration conf = new Configuration(); conf.set(MiniDFSCluster.HDFS_MINIDFS_BASEDIR, baseDir.getAbsolutePath()); MiniDFSCluster.Builder builder = new MiniDFSCluster.Builder(conf); hdfsCluster = builder.build(); String hdfsURI = "hdfs://localhost:"+ hdfsCluster.getNameNodePort() + "/"; DistributedFileSystem fileSystem = hdfsCluster.getFileSystem();
在tearDown方法中,您应该关闭mini hdfs集群,并删除临时目录.
hdfsCluster.shutdown(); FileUtil.fullyDelete(baseDir);
看看hadoop测试罐
org.apache.hadoop hadoop-test 0.20.205.0
它已被归类为设置MiniDFSCluster和MiniMRCluster,因此您可以在没有hadoop的情况下进行测试
为什么不使用像Mockito或PowerMock这样的模拟框架来模拟与FileSystem的交互?您的单元测试不应该依赖于实际的FileSystem,而应该只是在与FileSystem交互时验证代码中的行为.