2015-09-25 18 views
5

Próbuję użyć JunitParams w celu sparametryzowania moich testów. Ale moim głównym problemem jest to, że parametry są ciągami znaków specjalnych, tyldy lub rury.Używanie "przecinków" lub "potoków" w obrębie 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 | 
    } 
} 

Z tyldą nie mam problemu. ale z rurą mam wyjątek:

java.lang.IllegalArgumentException: wrong number of arguments 

Rura jako przecinkiem jest używany jako separator parametrów.

Czy jest jakiś sposób, aby ustawić inny separator? A może to ograniczenie JunitParams?

+0

można pracować wokół używając [składni] (https://github.com/Pragmatists/JUnitParams/blob/master/src/test/ java/junitparams/usage/Samples_of_Usage_Test.java # L34) –

+0

Chciałbym również spróbować uciec z rury z "\\", zobacz [ten przykład] (https://github.com/Pragmatists/JUnitParams/blob/master/src/ test/java/junitparams/usage/Samples_of_Usage_Test.java # L114) –

+0

Próbowałem tej składni, nadal nie działa. teraz używam Sparametryzowane zamiast JunitParams. to działa, ale argument jest dla wszystkich JunitClass (więc musiałem stworzyć nową klasę). "\\" działa. Ale ponieważ moje parametry są trudne do odczytania (pełne znaków | i ~ oraz innych znaków specjalnych), wolałbym nie dodawać wielu znaków ucieczki w moich zestawach wejściowych. Ale tak, działa. – GaspardP

Odpowiedz

-1

możesz sprawdzić zohhak. jest podobny do parowania junit, ale zapewnia większą elastyczność w parametrach analizy. Wygląda na to, że może znacznie pomóc w radzeniu sobie z trudnymi do odczytania parametrami. przykłady z docs:

@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

Nie mogę znaleźć opcji, aby skonfigurować znaki separujące, ale znaki te nie muszą być uciekł jeśli podasz swoje dane w Object[][].

Rozważmy następujący przykład:

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

Zarówno , i | może być bezpośrednio stosowany, co znacznie poprawia czytelność swoich testów.

Opisz swój test, używając @Parameters(method = "provideParameters"), aby skorzystać z tej fabryki testów. Możesz nawet przenieść fabrykę do innej klasy (np. @Parameters(source = Other.class, method = "provideParameters")).

0

Można rzeczywiście uciec rurę z podwójnych ukośników:

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

Jestem przy JUnitParams 1.0.6 przy okazji ... –

Powiązane problemy