2016-10-25 12 views
0

メソッドに提供されたパスが存在する場合、ファイルを取得するgetファイルメソッドがあります。ファイルが存在しない場合は、NullPointerExceptionがスローされます。Mockitoを使用して例外をテストする

public File getFile(String downloadFileName) throws Exception { 
    File fileToUpload = new File(getFileLocation(downloadFileName)); 
    if(!fileToUpload.exists() && !fileToUpload.isFile()){ 
     throw new Exception("File not found"); 
    } 
    return fileToUpload; 
} 

は、私はファイルが存在しないときにメソッドが例外をスローするテストをチェックするJunitテストを書きたいとパスがないファイルが、ディレクトリである場合(条件は、ifループでカバー)。

JUnitの:

public class KnewtonContentInventoryWokerTest { 

    private HttpWorker httpHelper = mock(HttpWorker.class); 
    private KnewtonContentInventoryWorker knewtonContentInventoryHelper; 
    private MessageHandler messageHandler = spy(new MessageHandler(false)); 
    private String programNameString = "Realize Sample Program"; 
    private String completeResponse; 
    private String filePath = "src/test/resources/Content_Inventory_testFile.xls" ; 
    private String fileName = "Content_Inventory_testFile"; 
    private String fileDir = "src/test/resources/"; 
    private String jobIdRestPath = ""; 
    private String jobStatusRestPath = ""; 
    private String downloadExcelFileRestPath = ""; 
    private String uploadFileToS3RestPath = ""; 
    private File file = new File(filePath); 

    @Before 
    public void setup() throws Exception { 
     setupWorker(); 

    } 

    @Before 
    public void setupWorker() { 
     AuthContext authContext = new AuthContext(); 
     authContext.setAuthenticationDetails("/test/", "user", "pass", new HashSet<Cookie>()); 
     File file = new File("src/test/resources/Content_Inventory_testFile.xls"); 
     knewtonContentInventoryHelper = spy(new KnewtonContentInventoryWorker(authContext,programNameString, externalIds)); 
     knewtonContentInventoryHelper.messageHandler = messageHandler; 
    } 

    /** 
    * Test the setting up method 
    */ 
    @Test(expected = Exception.class) 
    public void testGetFileThrowsException() throws Exception { 
     doThrow(new Exception("")).when(knewtonContentInventoryHelper).getFile(anyString()); 
     knewtonContentInventoryHelper.getFile(anyString()); 
    } 
} 

上記Junitは、私が今のところ持っているものである、しかし、私はテスト権利を致しておりませんと思います。 テスト方法testGetFileThrowsException()で2つのシナリオをテストする方法を理解できません。ファイルが存在しない場合、またはファイルパスがディレクトリの場合、例外がスローされるようにします。

答えて

1

例外がスローされたかどうかをテストするには、TemporaryFolder JUnitクラスを使用することをお勧めします。

@Rule 
public TemporaryFolder tempFolder = new TemporaryFolder(); 

@Test(expected=Exception.class) 
public void testGetFileThrowsExceptionIfDirectory() throws Exception { 
    // The newFolder method will return a File object, so the fakeFolder 
    // has a getPath() method, and we can pass that to your getFile method. 
    File fakeFolder = tempFolder.newFolder('fakepath'); 
    knewtonContentInventoryHelper.getFile(fakeFolder.getPath()); 
} 

@Test(expected=Exception.class) 
public void testGetFileThrowsExceptionIfFileDoesNotExists() throws Exception { 
    File fakeFolder = tempFolder.newFolder('fakepath'); 
    tempFolder.newFile('fakepath/a.txt'); 
    // /tmp/junitRanDOMX219/fakepath/a.txt exists but not b.txt, so it should thrown the exception. 
    knewtonContentInventoryHelper.getFile(fakeFolder.getPath() + "/b.txt"); 
} 

テストファイルの先頭にインポートする必要がありTemporaryFolderFileRuleクラスを覚えておいてください:詳細情報については

import java.io.File; 
import org.junit.Rule; 
import org.junit.rules.TemporaryFolder; 

junit docsを参照してください。

1

ありがとうスラックマート。 私はいくつかのことを試しましたが、これは私のためにはうまくいったのです。

import org.mockito.Mockito; 

/* 
* test setup() 
*/ 

@Test(expected = Exception.class) 
public void testGetFileThrowsException() throws Exception { 
    File mockedFile = Mockito.mock(File.class); 
    Mockito.when(mockedFile.exists()).thenReturn(false); 
    doThrow(new Exception("")).when(knewtonContentInventoryHelper).getFile(fileDir); 
    knewtonContentInventoryHelper.getFile(anyString()); 
} 

@Test(expected = Exception.class) 
public void testGetFileInvalidDir() throws Exception { 
    File mockedFile = Mockito.mock(File.class); 
    Mockito.when(mockedFile.isDirectory()).thenReturn(true); 
    doThrow(new Exception("")).when(knewtonContentInventoryHelper).getFile(fileDir); 
    knewtonContentInventoryHelper.getFile(anyString()); 
} 

あなたは

+0

ニースを@Slackmartおかげで、私はまた、ユニットテストに優先順位を持つアンドロイドを学んでいます。 – slackmart

関連する問題