2012-02-01 7 views
4

私は、単にFTPFileの配列をモックする方法があるかどうかを知りたいと思っています。 私は偽物FTPFILE []は、私がテストしたい関数にパラメータとして渡すしようとしています:fileSystem to FTPFile []?

protected void indexFolder(FTPClient, FTPFile[], File, FTPFolderAssetSource); 

私は私のftpサーバ、名前が言うように、偽のFakeFtpServerを使用しています。このように偽のftpコンテンツへこのライブラリ許可:今すぐ

 fileSystem = new WindowsFakeFileSystem(); 
    DirectoryEntry directoryEntry1 = new DirectoryEntry("c:\\"); 
    directoryEntry1.setPermissions(new Permissions("rwxrwx---")); 
    directoryEntry1.setOwner(USER1); 

    FileEntry fileEntry1 = new FileEntry("c:\\data\\file1.txt", CONTENTS); 
    fileEntry1.setPermissionsFromString("rw-rw-rw-"); 
    fileEntry1.setOwner(USER1); 
    fileEntry1.setGroup(GROUP); 

    fileSystem.add(directoryEntry1); 
    fileSystem.add(fileEntry1); 

    ftp = new FakeFtpServer(); 
    ftp.setFileSystem(fileSystem); 

、どのように私は、ファイルシステムがパラメータとしてFTPFILE []が必要です私の機能をテストするために使用することができますか?

答えて

3

FTPFileクラスについては特別なことはありません。残念ながら、Mockitoを使用すると、最終的にyou can not mock arraysとなります。

このサンプルコードは、問題を示す必要があります。それは

import static org.mockito.Mockito.*; 

import org.junit.Test; 

public class TestMockArrays { 
    interface Animal { 
    String getName(); 
    } 

    @Test 
    public void testMockArray() { 
    final Animal[] mockArray = mock(Animal[].class); 

    when(mockArray[0].getName()).thenReturn("cat"); 
    when(mockArray[1].getName()).thenReturn("dog"); 
    when(mockArray[2].getName()).thenReturn("fish"); 

    print1st3(mockArray); 
    } 

    public static void print1st3(final Animal[] animals) { 
    System.out.println(animals[0].getName() + " " + animals[1].getName() + " " + animals[2].getName()); 
    } 
} 

を実行し、そしてあなたはそれが明示的に問題になり、エラーメッセージになり表示されます:

org.mockito.exceptions。 base.MockitoException: モック/スパイクラス[LTestMockArrays $アニマルできません。

Mockitoは、次/スパイを模擬することはできません。 - finalクラス - 匿名クラス - プリミティブ型

を最も簡単な解決策はMockitoのモックに周りに一定の制限を受けるPowermockようMockitoの拡張を使用することです能力はバイトコード操作を使用することによって。次に、あなたのJUnitテストクラスに次の注釈を追加することにより、モック配列を作成することができます。

@RunWith(PowerMockRunner.class) // Need to run with Powermock runner 
@PrepareForTest(FTPFile[].class) // We prepare FTPFile[] class for test because it's final 

そして、あなたの試験方法で使用すると、通常通りMockitoのモックを作成します。

FTPFile[] mockFTPFiles = mock(FTPFile[].class); 
関連する問題