Я работаю с:
- Весенний МВК
- Весенний MVC-тест
- Спок Фреймворк
О работе Спока с @Unroll
У меня следующая ситуация с блоком where
У меня может быть следующее:
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
есть один элемент.
Спок выдает исключение.
Поскольку я могу протестировать множество URL-адресов, это заставляет многословно повторять термин 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
- Спок: чтение тестовых данных из файла CSV
- 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
. - person Rao   schedule 17.02.2016