2017-05-22 19 views
1

매개 변수화 된 junit4 testing으로 가능하면 모든 문서에서 검색하고 있습니다. 서로 다른 입력 데이터 Passing arrays to Parameterized JUnit의 배열을 반환 곳다중 입력 데이터와 동일성을 위해 배열을 테스트하는 방법

public class GameEntry{ 
    private String name; 
    private int score; 

    // Constructor and Getters... 
} 

public class Scoreboard{ 
    private int numEntries = 0; 
    private GameEntry[] board; 

    // Constructor 
    public Scoreboard(int capacity){ 
     board = new GameEntry[capacity]; 
    } 

    // Add method - Only if entry is higher than current entries 
    public void add(GameEntry e){ 
     // Code here...   
    } 

    // Remove method 

    // Reset method 
} 

내가 파라미터 테스트에 대해 읽었습니다,하지만 내가 좋아하는 것이 무엇인지 확실히되지 않습니다 : 내가 무엇을 기본적으로

는 GameEntry 및 스코어 보드 두 종류입니다 할 것. 나는 gameEntries 이름, 점수 값 및 name 및 score에 대한 예상 값에 대한 다른 텍스트 파일을 사용하여 입력 텍스트 파일을 만드는 10 가지 테스트를 실행하는 데 관심이 있습니다. 나중에 데이터를 변경하려는 경우 모든 데이터를 테스트 클래스에서 제외하고 싶습니다. 입력 및 예상 파일을 구문 분석 한 후 배열을 비교하려면 Assert.assertArrayEquals(expectedResult, result)을 사용합니다.

매개 변수화 된 Junit 테스트 없이는이 작업을 수행하는 데 아무런 문제가 없어야하지만 한 테스트에 실패하면 전체 테스트가 실패합니다. 나는 입력 추적에 카운터를 둘 수 있다고 생각한다. DRY를 피하기 위해 하나의 테스트 만 작성하고 싶습니다. Junit 또는 testing framework으로 가능합니까?

+0

데이터 공급자가 이와 같은 문제를 해결할 수있는 곳에서 TestNG를 사용할 수 있습니다. 테스트 케이스가 한 항목에 대해 실패한 경우에도 TestNG를 사용해도 테스트가 중단됩니다. – biziclop

답변

1

JUnit 5에는 동적 테스트라는 개념이 있으며 런타임시 테스트 사례를 생성 할 수 있습니다.

public class PrimeNumbersTest { 

    @TestFactory 
    Stream<DynamicTest> test_first_1000_prime_numbers() throws Exception { 
     return primes().mapToObj(p -> DynamicTest.dynamicTest(
       // Test case name. 
       "Prime: " + p, 
       // Test case content. 
       () -> assertTrue(PrimeNumbers.isPrime(p)))); 
    } 

    private LongStream primes() throws Exception { 
     return Files.lines(Paths.get(getClass().getResource("/primes-1000.txt").toURI())) 
       .mapToLong(Long::parseLong); 
    } 

} 

test_first_1000_prime_numbers() 외부 자원 primes-1000.txt에서 그들을로드 primes()에 의해 반환 된 각 소수를위한 테스트 케이스를 만들 수 @TestFactory을 사용

의 (a JUnit 5 workshop에서 차용)이 예에서보세요. 예를 들어, 다음과 같이 인 IntelliJ이 표시

enter image description here

그래서, 당신은 동적으로 설정 각각에 대한 테스트 케이스를 만들 수 있습니다. 이렇게하면 테스트 데이터가 테스트 클래스에서 제외되고 실패한 어설 션을 포함하는 테스트 만 실패합니다.

user guide 또는이 우수한 blog post을 확인하십시오. 그러나 JUnit 5는 아직 개발 중입니다.