2012-02-02 11 views
4

私はJunitテストに頼まれた以下のようなコードを持っています。 Junit、EasyMock、Spring Frameworkを使用しています。私はジュニットのテストをあまり行っていないし、私は以下のことをどうやって模擬することができるかについて少し迷っている。ファイル操作を模擬したJunitテスト

基本的には、自分のマシンでテストを書いているときや実行しているときに、ディレクトリにあるファイルのパスは存在しません。実際に実行される場所が存在することが保証され、統合テスト中にテストされるため、オブジェクトを一時的な場所にモックする方法があるのだろうかと思います。

しかし、実際にディレクトリが存在するときにプロジェクトの残りの部分と統合されている場合は、これを実行することを賢明にするか、これをテストする必要があると思います。

Junitのテストは全く新しいものです。私は周りを見回しましたが、私がしたいことをする方法を見ることができません(私はそれをしてはならない良いヒントかもしれません:P)。

String fileName = pathToFileName; 

File file = new File(fileName); 

if (file.exists()) { 

    FileUtil.removeLineFromFile(file, getValueToRemove(serialNumber)); 
} 

答えて

3

第1のオプションは、模擬を直接注入できるクラスにファイルを挿入することです。通常はより良いオプションですが、常にエレガントで実現可能ではありません。

このような問題のあるオブジェクトに対して保護されたラッパー関数を作成することで、これらのことからいくらかのマイレージを得ました。テストクラスで

protected File OpenFile(String fileName) { return new File(filename;} 

:テスト対象のクラスでは、あなたが必要な場合は

File file = EasyMock.createNiceMock(File.class); 

private MyClass createMyClass() { 
    return new MyClass() { 
    @Override protected File OpenFile(String fileName) { return file; } 
    }; 
} 

@Test public testFoo() { 
    EasyMock.expect(file.exists()).andStubReturn(true); 
    //... 
    MyClass myClass=createMyClass(); 
    // ... 
} 

は、検証のために、この場合の構成パラメータ(ファイル名)オフに保存することができます。

+0

'MyClass'クラスは、プロダクションで作成した' file'の知識がありません。 –

関連する問題