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