2016-10-25 3 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; 
} 

나는 파일이 존재하지 않는 경우 메소드가 예외를 throw하는 테스트를 확인하는 Junit 테스트를 작성하고 싶은 경로가 아닌 파일이 아니라 디렉토리 인 경우 (조건이 경우 루프에 포함).

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()에서 두 시나리오를 테스트하는 방법을 이해할 수 없습니다. 파일이 존재하지 않거나 파일 경로가 디렉토리 인 경우 예외가 throw되기를 원합니다.

답변

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"); 
} 

TemporaryFolder, FileRule 클래스가 테스트 파일의 시작 부분에 가져와야합니다주의 사항 : 추가 정보를 위해

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

관련 문제