2011-11-29 12 views
9

ユニットテストを実行したいが、私はorg.apache.hadoop.fs.FileSystemインスタンスを持っている必要がある。 FileSystemを作成するためのモックその他のソリューションはありますか?Hadoop:ユニットテストの方法FileSystem

答えて

6

あなたはHadoopの2.0.0を使用している場合は、Hadoopの

0

私は(私がより良い解決策を見つけるまで)何をしたのですか?私はFileSystemを拡張しました。

5

MockitoやPowerMockのようなモックフレームワークを使用して、あなたのインタラクションをFileSystemでモックにしてみませんか?単体テストは実際のFileSystemに依存すべきではありませんが、FileSystemと対話する際のコード内の動作を検証するだけですべきです。

10

せずにテストすることができますので、それはMiniDFSClusterとMiniMRClusterを設定するために分類しているHadoopのテストジャー

<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-test</artifactId> 
    <version>0.20.205.0</version> 
</dependency> 

を見て、上記 - あなたのローカルマシンの一時HDFSを作成し、その上に、あなたのテストを実行することができ、それにより

<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-minicluster</artifactId> 
    <version>2.5.0</version> 
    <scope>test</scope> 
</dependency> 

Hadoopの-miniclusterを使用することを検討してください。

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(); 

そして、あなたはあなたのミニHDFSクラスタをシャットダウンして、一時ディレクトリを削除する必要がありtearDownメソッドで:setUpメソッドは次のようになります。

hdfsCluster.shutdown(); 
FileUtil.fullyDelete(baseDir); 
0

RawLocalFileSystemを参照してください。私はあなたがそれを嘲笑するほうがいいと思うが。

0

あなたはHBaseTestingUtilityを使用することができます。

public class SomeTest { 
    private HBaseTestingUtility testingUtil = new HBaseTestingUtility(); 

    @Before 
    public void setup() throws Exception { 
     testingUtil.startMiniDFSCluster(1); 
    } 

    @After 
    public void tearDown() throws IOException { 
     testingUtil.shutdownMiniDFSCluster(); 
    } 

    @Test 
    public void test() throws Exception { 
     DistributedFileSystem fs = testingUtil.getDFSCluster().getFileSystem(); 
     final Path dstPath = new Path("/your/path/file.txt); 
     final Path srcPath = new Path(SomeTest.class.getResource("file.txt").toURI()); 
     fs.copyFromLocalFile(srcPath, dstPath); 
     ... 
    } 
} 
関連する問題