2015-09-25 5 views
5

Ich versuche, JunitParams zu verwenden, um meine Tests zu parametrisieren. Aber mein Hauptproblem ist, dass die Parameter Strings mit Sonderzeichen, Tilde oder Pipe sind.Verwendung von "Komma" oder "Rohr" innerhalb von 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 | 
    } 
} 

Mit Tilde habe ich kein Problem. Aber mit Rohr, habe ich eine Ausnahme:

java.lang.IllegalArgumentException: wrong number of arguments 

Das Rohr, wie das Komma, als Separator für Parameter verwendet wird.

Gibt es eine Möglichkeit für mich, einen anderen Separator zu setzen? Oder ist dies eine Einschränkung von JunitParams?

+0

Sie könnten Umgehen mit [diese Syntax] (https://github.com/Pragmatists/JUnitParams/blob/master/src/test/ java/junitparams/usage/Samples_of_Usage_Test.java # L34) –

+0

Ich würde auch versuchen, die Pipe mit "\\" zu umgehen, siehe [dieses Beispiel] (https://github.com/Pragmatists/JUnitParams/blob/master/src/ test/java/junitparams/usage/Samples_of_Usage_Test.java # L114) –

+0

Ich habe diese Syntax versucht, funktioniert immer noch nicht. Jetzt verwende ich parametrisierte statt JunitParams. es funktioniert, aber das Argument ist für alle JunitClass (also musste ich eine neue Klasse erstellen). Das "\\" funktioniert. Aber weil meine Parameter schwer zu lesen sind (voll von | und ~ und anderen Sonderzeichen), hätte ich es vorgezogen, in meinen Eingabesätzen nicht viel flüchtiges Zeichen hinzuzufügen. Aber ja, es funktioniert. – GaspardP

Antwort

-1

können Sie überprüfen zohhak. Es ähnelt Junit-Parametern, bietet aber viel mehr Flexibilität beim Parsen von Parametern. Es sieht so aus, als ob es im Umgang mit "schwer lesbaren" Parametern erheblich helfen kann. Beispiele aus der Dokumentation:

@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

Ich muss entkommen gab es keine Möglichkeit finden, um die Trennzeichen Zeichen, aber diese Zeichen zu konfigurieren nicht, wenn Sie Ihre Daten in einem Object[][] liefern.

Betrachten Sie das folgende Beispiel:

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

Beide , und | können direkt verwendet werden, die erheblich die Lesbarkeit des Tests verbessert.

Beschriften Sie Ihren Test mit @Parameters(method = "provideParameters"), um diese Testfabrik zu nutzen. Sie können die Factory sogar in eine andere Klasse verschieben (z. B. @Parameters(source = Other.class, method = "provideParameters")).

0

Sie können in der Tat das Rohr mit Doppelschrägstriche entkommen:

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

Ich bin übrigens auf JUnitParams 1.0.6 ... –

Verwandte Themen