2014-08-28 3 views
0

저는 현재 작동하면서 점점 더 광대 한 프로그램을 개발하고 있습니다. 매번 새로운 Class을 테스트하고 싶을 때마다 내 Main 클래스에서 메서드를 추가하고 제거해야합니다. 프로그램이 성장함에 따라 점점 더 성가 시게됩니다.Java/Junit을 사용하여 단일 클래스를 실행하는 방법

원하는 메소드를 확인하기 위해 빌드 한 새로운 클래스에 대해 JUnit 테스트를 작성하고 싶습니다. 지금까지 살펴본 튜토리얼에서는 기본 테스트 메소드를 작성하여 메소드가 예상되는 수학 결과 또는 부울 등을 반환한다는 Assert에 작성하는 방법을 설명합니다.하지만 이는 내가 찾고자하는 것이 아닙니다. 난 잠시 동안 봤는데 꽤 많이 읽을 수 있지만 내가 원하는 것을 사용자 정의 테스트 메소드를 작성하는 방법을 자세히 설명하는 것을 찾을 수는 없습니다. loadFromFile() 방법의 경우

, 예상 된 결과가 성공적으로 텍스트 파일을로드하고 Map<String, String>로 구문 분석했다고 할 것입니다,하지만 난 방법을 알아낼 수 없어요 :

아래의 클래스가 고려 이것을하기 위해.

완전히 완료되면 내 checkDuplicates() 메서드의 현재 예상 결과는 개체 생성시 생성자에 전달 된 데이터 목록 하나를 다른 개체와 비교하여 목록 중 하나에서 데이터를 제거하는 것입니다. 나는이 단계를 완전히 끝내지 못했습니다. 각 단계에서 제가 제대로 작동 할 때 쓰는 것을 확실히하고 싶습니다.

어떻게 이런 종류의 방법을 쓸 수 있습니까?

package com.airport.twitter; 

import java.io.*; 
import java.util.*; 

public class FileHandler { 
    private Map<String, String> arrivalsMap = new TreeMap<String, String>(); 
    private Map<String, String> departuresMap = new TreeMap<String, String>(); 
    private ArrayList<String> arrivals = new ArrayList<String>(); 
    private ArrayList<String> departures = new ArrayList<String>(); 
    private String arrLocation, depLocation; 

    public FileHandler(ArrayList<String> arrivals, ArrayList<String> departures) { 
     this.arrivals = arrivals; 
     this.departures = departures; 
     this.arrLocation = "src/main/resources/arrivals.txt"; 
     this.depLocation = "src/main/resources/departures.txt"; 
    } 

    public Map<String, String> loadFromFile(Map<String, String> list, 
      String location) throws IOException { 
     String str = null; 
     BufferedReader br = new BufferedReader(new FileReader(location)); 
     while ((str = br.readLine()) != null) { 
      String[] parts = str.split("="); 
      list.put(parts[0], parts[1]); 
     } 
     br.close(); 
     return list; 
    } 

    public void checkDuplicateFlights() throws IOException { 
     arrivalsMap = loadFromFile(arrivalsMap, arrLocation); 
     ConsolePrinter.printMap(arrivalsMap); 
     System.out.println("\n"); 
     departuresMap = loadFromFile(departuresMap, depLocation); 
     ConsolePrinter.printMap(departuresMap); 
    } 
} 
+0

왜 결과를 수학 결과 또는 부울과 동일하게 확인할 수 없습니까? 단언 대신 assertEquals를 사용하십시오. – Burkhard

+0

필자는 Junit에 대한 이해가 부족하다는 것을 알았지 만, 메소드의 Map 내용이 50 줄의 텍스트를 나타낼 필요가 있는지 확인하지 않아도됩니다. 그 파일에 성공적으로 연결되어 있는지 확인하고 그것이 의미가있는 경우 올바르게 클래스에로드했는지 확인해야합니다. 나는 인쇄 방법 또는 무엇인가로 그 내용을보기를 바랄 것이다. assertNotNull()과 같은 것을 제안하고 있습니까? – user3363286

+0

파일을 찾을 수없는 경우 loadFromFile은 IOException을 발생시킵니다.결과가 예상대로 일 때 프로그래머가해야 할 일을합니다. 즉. 파일이 발견되면 리턴 된 맵은 올바르며, 파일을 찾을 수 없을 때 IOException이 발생합니다 (최소한 2 개의 UnitTest가 필요합니다). – Burkhard

답변

0

loadFromFile을 테스트하려면 파일에 몇 가지 값을 넣고 결과를 확인하십시오. 파일의 내용을 알고 있으므로 메소드가 리턴해야하는 내용을 알고 테스트 할 수 있습니다.

는 예를 들어, 파일이 포함되어있는 경우 :

x=1 
y=2 
z=3 

나는이 같은의 JUnit 테스트 클래스에서이 방법을 실행하는 것입니다 :

@Test 
public void testLoadFromFile() 
{ 
    //...init 
    FileHandler fh = new FileHandler(new ArrayList<>(), new ArrayList<>()); 
    result = fh.loadFromFile(known_path_to_File); 
    assertEquals(expectedMap, result); 
    // **here you can be sure that the file was read correctly!** 
} 

assertMap가이 개지도를 비교하는 것입니다.
expectedMap는 X = 1을 포함 할 것, Y는 2 및 z = 3 =와 같이 초기화 할 수있다 :

void org.junit.Assert.assertEquals(Object expected, Object actual) 

그래서이 같은 수입해야합니다 : 그런데

private static final Map<String, String> expectedMap; 
static { 
    Map<String, String> aMap = new HashMap<>(); 
    aMap.put("x", "1"); 
    aMap.put("y", "2"); 
    aMap.put("z", "3"); 
    expectedMap = Collections.unmodifiableMap(aMap); 
} 

:

import static org.junit.Assert.assertEquals; 

(파일을 찾을 수없는 경우 실패)를 실행해야 두 번째 테스트 :

@Test(expected=IOException.class) 
public void testFileNotFound() 
{ 
    FileHandler fh = ...//same as previous 
    fh = loadFromFile("no real file here.txt"); 
} 
관련 문제