Использование "Запятая" или "труба" в 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?

3 ответа

Вы можете действительно избежать трубы с двойной обратной косой чертой:

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

Я не нашел опции для настройки символов разделителя, но эти символы не нужно экранировать, если вы предоставляете свои данные в Object[][],

Рассмотрим следующий пример:

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

И то и другое , а также | может использоваться непосредственно, что значительно улучшает читаемость ваших тестов.

Аннотируйте свой тест с @Parameters(method = "provideParameters") использовать этот тестовый завод. Вы даже можете переместить фабрику в другой класс (например, @Parameters(source = Other.class, method = "provideParameters")).

Вы можете проверить zohhak. это похоже на параметры junit, но дает вам гораздо больше гибкости при разборе параметров. похоже, это может значительно помочь в работе с трудно читаемыми параметрами. примеры из документов:

@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();
}
Другие вопросы по тегам