2013-03-09 2 views
5

Я пишу модульный тест для проекта JERSEY.Как проверить методы контроллера JERSEY с UriInfo

Для методов без строки запроса я могу просто создать экземпляр контроллера и вызвать метод.

Также работайте с аргументом в пути, потому что они отображаются в виде строковых аргументов метода.

Но когда я queryStrings режим имеет специальный аргумент (@Context UriInfo url)

Как я могу построить аргумент UriInfo в моих модульных тестов? Почему у этого класса нет конструктора?

+2

Ее очень необычно, чтобы испытать Джерси ресурс вне контейнера, и вид контрпродуктивным. Вещи, которые не будут работать? Ресурсы, вводимые контейнером, интерпретация пути, извлечение параметров, локаторы подресурсов ... список продолжается. Если вы действительно хотите проверить свои классы ресурсов JAX-RS, вы должны сделать это со стороны *** клиента ***. – Perception

+0

Я также могу запустить некоторый тест в контейнере tomcat, но затем в терминах отладочного модульного теста анализа кода покрытия кода. Я полностью слеп, потому что они работают на 2 отдельных процесса. –

+0

Если вы запускаете автономный Tomcat с развернутым приложением, вы можете запустить соответствующий тест jUnit против него, который использует клиентскую библиотеку для проверки ресурсов. Вы можете использовать клиентские библиотеки Jersey или даже Apache HttpComponents для создания этих тестов. – Perception

ответ

2

UriInfo - это интерфейс, поэтому вы не можете напрямую его создать. Вы должны подклассифицировать его и создать свой собственный класс UriInfo. Таким образом, ваш класс uriinfo должен преобразовать String uri/url в объект UriInfo.

public class UriInformation implements UriInfo { 
    MultivaluedMap<String, String> pathParamMap; 
    MultivaluedMap<String, String> queryParamMap; 
    public UriInformation(UriInfo uriInfo) { 
     //parse uriInfo 
    } 
//setters/getters 
} 

Таким образом, вы можете тестировать свои ресурсы без использования его внутри tomcat/server.

6

Если вы используете Mockito в тестах, можно издеваться из UriInfo вместо:

import java.net.URI; 
import javax.ws.rs.core.UriInfo; 

UriInfo mockUriInfo = mock(UriInfo.class); 
when(mockUriInfo.getRequestUri()).thenReturn(new URI("http://www.test.com/go")); 
+0

Какой класс URI вы использовали здесь? – k4sia

+1

Я только что проверил и добавил импорт выше .... это на Java 7 .... –

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