2017-05-22 17 views
1

これがパラメータ化されたjunit4 testingで可能な場合は、どのドキュメントでも検索しています。複数の入力データと等しいかどうかをテストする方法

は、基本的には二つのクラス、GameEntryとスコアボードが何であるかを私が持っている:

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 
} 

私はあなたが異なる入力データPassing arrays to Parameterized JUnitの配列を返すパラメータ化テストについて読んだが、それは私が希望かなりものではありませんする。私は、gameEntries名、スコア値、および名前とスコアの期待値のための別のテキストファイルで入力テキストファイルを作成する10の異なるテストを実行することに興味があります。後でデータを変更したい場合は、すべてのデータをテストクラスから除外したいと思います。入力と予想されるファイルが解析された後、私はAssert.assertArrayEquals(expectedResult, result)を使って配列を比較します。

パラメータ化されたJunitテストを行わなければ問題はありませんが、1つのテストが失敗した場合、テスト全体が失敗します。私は入力を追跡するためのカウンタを保持することができると思います。私はDRYを避けるためにただ一つのテストを書いてみたいです。これはJunitまたはtesting frameworkで可能ですか?

+0

このような問題を解決するためにデータプロバイダが利用できるTestNGを使用できます。テストケースが1つのエントリで失敗した場合でもTestNGであっても、そのケースについてテストは中止されます。 – biziclop

答えて

1

JUnit 5には「動的テスト」の概念があり、実行時にテストケースを生成できます。

は(JUnit 5 workshopから借りた)この例を見てください:

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を使用しています。たとえば、次のようにIntelliJのは、この表示されます。

enter image description here

だから、あなたが動的にセットアップのそれぞれのためのテストケースを作成することができます。これにより、テストデータがテストクラスから除外され、失敗したアサーションを含むテストだけが失敗します。

詳細については、user guideまたはこの優秀なblog postをご覧ください。ただし、JUnit 5はまだ開発中です。

関連する問題