2015-09-25 10 views
5

内の「カンマ」や「パイプ」を使用。しかし、私の主な問題は、パラメータが特殊文字、チルダまたはパイプの文字列であることです。私は私のテストをパラメータ化するために、JunitParamsを使用しようとしているJunitParams

import org.junit.Rule; 
import org.junit.Test; 
import org.junit.rules.ExpectedException; 
import org.junit.runner.RunWith; 

import junitparams.JUnitParamsRunner; 
import junitparams.Parameters; 

@RunWith(JUnitParamsRunner.class) 
public class TheClassTest { 

    @Rule 
    public ExpectedException exception = ExpectedException.none(); 

    @Test 
    @Parameters({"AA~BBB"}) 
    public void shouldTestThemethod(String value) throws Exception { 
     exception.expect(TheException.class); 

     TheClass.theMethod(value);  
     // Throw an exception if value like "A|B" or "A~B", 
     // ie if value contain a ~ or a | 
    } 
} 

チルダでは問題ありません。 しかしパイプと、私は例外があります

java.lang.IllegalArgumentException: wrong number of arguments 

パイプ、コンマとして、パラメータのセパレータとして使用されます。

私は別のセパレータを設定する方法はありますか? これはJunitParamsの制限ですか?

+0

あなたは[この構文](https://github.com/Pragmatists/JUnitParams/blob/master/src/test/を使用して周りに仕事ができますjava/junitparams/usage/Samples_of_Usage_Test.java#L34) –

+0

また、パイプを "\\"でエスケープしようとします。[このサンプル](https://github.com/Pragmatists/JUnitParams/blob/master/src/)を参照してください。テスト/ java/junitparams/usage/Samples_of_Usage_Test.java#L114) –

+0

私はこの構文を試しても、まだ動作しません。 私はJunitParamsの代わりにParameterizedを使用しています。 それが働いているが、引数がすべてJunitClass(私は新しいクラスを作成する必要がありました)のためのものです。 "\\"は機能します。 しかし、私のパラメータは読みにくいので(|や〜やその他の特殊文字でいっぱいです)、私は入力セットに多くのエスケープ文字を追加しない方がよいでしょう。 はい、うまくいきます。 – GaspardP

答えて

-1

zohhakを確認できます。これはjunitのparamsと似ていますが、パラメータを解析する際の柔軟性が大幅に向上します。 「読みにくい」パラメータを扱う際には大きな助けになるようです。ドキュメントからの例:

@TestWith(value="7 | 19, 23", separator="[\\|,]") 
public void mixedSeparators(int i, int j, int k) { 
    assertThat(i).isEqualTo(7); 
    assertThat(j).isEqualTo(19); 
    assertThat(k).isEqualTo(23); 
} 

@TestWith(value=" 7 = 7 > 5 => true", separator="=>") 
public void multiCharSeparator(String string, boolean bool) { 
    assertThat(string).isEqualTo("7 = 7 > 5"); 
    assertThat(bool).isTrue(); 
} 
2

私は区切り文字を設定するオプションを見つけられませんでしたが、あなたはObject[][]にデータを提供する場合、これらの文字をエスケープする必要はありません。

両方 ,|
public static Object[][] provideParameters() { 
    return new Object[][] { 
     new Object[] {"A,B|C"} 
    }; 
} 

を直接使用することができ、大幅にあなたのテストの可読性を向上させます。

は、次の例を考えてみましょう。

このテストファクトリを使用するには、@Parameters(method = "provideParameters")でテストに注釈を付けます。ファクトリを別のクラスに移動することもできます(例:@Parameters(source = Other.class, method = "provideParameters"))。

0

あなたは確かに二重のバックスラッシュとのパイプをエスケープすることができます

@Parameters("AA\\|BBB") 
public void test(String value) 
+0

私はJUnitParams 1.0.6を途中で使っています... –

関連する問題