Я работаю с:Спок Framework: Как создать пользовательский поставщик данных
- Spring MVC
- Spring MVC тест
- Спок Framework
О Спок работает с @Unroll
у меня есть следующая ситуация относительно блока where
Я могу иметь t он следующее:
where: "Internal"
uriRequestReport << [ControllerSupportTest.createUrl1(), ControllerSupportTest.createUrl2()]
methodNameReport << [ControllerSupportTest.METHODNAME_FINDONE_BYID, ControllerSupportTest.METHODNAME_FINDONE_BYID ]
Здесь часть, где это раздражает в некотором роде является то, что данные должны быть похожи о количестве элементов или структуры, в данном случае 2.
Я имею в виду, следующий сбой:
where: "Internal"
uriRequestReport << [ControllerSupportTest.createUrl1(), ControllerSupportTest.createUrl2()]
methodNameReport << [ControllerSupportTest.METHODNAME_FINDONE_BYID]
Как вы можете видеть теперь methodNameReport
имеет один элемент.
Спок исключает исключение.
Так как я могу проверить множество ссылок, это делает многословным быть повторением ControllerSupportTest.METHODNAME_FINDONE_BYID
срок столько раз, сколько раз я использую ControllerSupportTest.createUrl#()
где # будет 5, например
В некотором смысле я могу обрабатывать следующим образом:
Примечание: это не является Java класс
public class MyDataSetUtil {
private static final Integer COUNTER = 2;
private MyDataSetUtil(){
}
public static List<String> uris(){
String[] uris = new String[COUNTER];
uris[0] = ControllerSupportTest.createUrl1()
uris[1] = ControllerSupportTest.createUrl2()
}
public static String[] methodNames(){
String[] methodNames = (String[])
createArray(ControllerSupportTest.METHODNAME_FINDONE_BYID);
return methodNames;
}
private static String[] createArray(String value){
String[] objects = new String[COUNTER];
for(int i=0; i<COUNTER; i++){
objects[i] = value;
}
return objects;
}
}
пока здесь у меня есть два вида проблем
- Я должен контролировать всегда в счетчик
- Если добавить новую переменную для
where
блока, такие какmediaType
, то я должен создать новый метод, какmethodNames()
- Всегда я должен повторить то же самое данные для каждого элемента массива, такие как
ControllerSupportTest.METHODNAME_FINDONE_BYID
для двух предыдущих пунктов, это отражено, как показано ниже:
Например:
public static String[] mediaTypes(){
String[] mediaTypes = (String[]) createArray(MediaType.APPLICATION_XML_VALUE);
return mediaTypes;
}
мне нужно что-то более практичным
Я прочитал следующий пост от SO тоже
- Spock: Reading Test Data from CSV File
- Utility API - CSVReader (исходный код из выше)
Но для моей ситуации я не хочу использовать CSV еще.
Другой подход через SQL, такие как:
Но опять же, для моей ситуации я не хочу использовать SQL еще.
Для меня более интересен такой подход:
В этой должности он имеет:
where:
[_, name, gender, expected] << new MultilineProvider(source: userData)
Смотрите MultilineProvider
код с поста.
поэтому я хочу сделать следующее:
[uriRequestReport, methodNameReport, moreVariablesifExists] << [MyDataSetUtil.theMethod()]
Требования:
Я хочу, чтобы вернуться через MyDataSetUtil.theMethod()
(см линии, показанные выше) коллекцию, где каждый элемент представляет собой то же, чем
uriRequestReport << [ControllerSupportTest.createUrl1(), ControllerSupportTest.createUrl2()]
methodNameReport << [ControllerSupportTest.METHODNAME_FINDONE_BYID, ControllerSupportTest.METHODNAME_FINDONE_BYID ]
Позвольте мне легко добавить новую переменную в блок where
и обновить быстро воспользовались Java-классом и не раз повторяли одни и те же данные.
Какой может быть наилучший подход? Помните, что код должен быть основан на Java.
Я исследовал Google без решения.
Если у вас есть лучшее предложение, это можно только приветствовать
Удивительно, но этот вопрос не помечен 'java'. – Rao
Моя ошибка ... исправлено ... –