2016-02-17 2 views
2

Я работаю с:Спок 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; 
    } 

} 

пока здесь у меня есть два вида проблем

  1. Я должен контролировать всегда в счетчик
  2. Если добавить новую переменную для where блока, такие как mediaType, то я должен создать новый метод, как methodNames()
  3. Всегда я должен повторить то же самое данные для каждого элемента массива, такие как ControllerSupportTest.METHODNAME_FINDONE_BYID

для двух предыдущих пунктов, это отражено, как показано ниже:

Например:

public static String[] mediaTypes(){ 
     String[] mediaTypes = (String[]) createArray(MediaType.APPLICATION_XML_VALUE);  
     return mediaTypes; 
    } 

мне нужно что-то более практичным

Я прочитал следующий пост от SO тоже

Но для моей ситуации я не хочу использовать 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 без решения.

Если у вас есть лучшее предложение, это можно только приветствовать

+0

Удивительно, но этот вопрос не помечен 'java'. – Rao

+0

Моя ошибка ... исправлено ... –

ответ

0

Просто напишите theMethod(), который будет возвращать набор записей, где каждая запись имеет все необходимые данные для одного теста. ArrayList URL-адресов, ArrayList имен методов и ArrayList других данных. Затем поместите все списки в один большой ArrayList или карту и верните этот объект.

{ 
"urls":[list of urls] 
"methods":[list of methodNames] 
"otherdata":[listOfOtherData] 
} 

Возврат карты непосредственно, или сделать arraylist таких карт.

Смежные вопросы