Как выполнить код модульного тестирования, который вызывает API клиента Джерси?

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

Каков наилучший подход к написанию модульного теста для кода, вызывающего клиентский API Джерси? Должен ли я использовать API-интерфейс сервера Джерси для написания веб-службы JAX-RS, а затем использовать инфраструктуру тестирования Джерси для модульного теста? Или я должен издеваться над вызовами веб-службы Джерси? У меня есть доступ к JMock. Или я должен попробовать другой подход?

Во время моего исследования я нашел это обсуждение, описывающее различные варианты, но я нашел полное решение. Имеются ли примеры кода, демонстрирующие предлагаемый подход JUnit? Я не смог найти ничего в документации Джерси.

Вот соответствующий исходный код:

public String getResult(URI uri) throws Exception {
  // error handling code removed for clarity
  ClientConfig clientConfig = new DefaultClientConfig();
  Client client = Client.create(clientConfig);
  WebResource service = client.resource(uri);
  String result = service.accept(accept).get(String.class);
  return result;
}

Вот примеры тестового кода, который я хотел бы пройти. Я хотел бы проверить (1) передачу действительного URI и получение действительной строки обратно и (2) передачу недопустимого (по какой-либо причине - недостижимого или несанкционированного) URI и получение исключения обратно.

@Test
public void testGetResult_ValidUri() throws Exception {
  String xml = retriever.getResult(VALID_URI);
  Assert.assertFalse(StringUtils.isBlank(xml));
}

@Test(expected = IllegalArgumentException.class)
public void testGetResult_InvalidUri() throws Exception {
  retriever.getResult(INVALID_URI);
}

Все вышесказанное является простым описанием того, что делает мой код. На самом деле поверх этого уровня находится слой, который принимает два URI, сначала пытается вызвать первый URI, а если этот URI не работает, то пытается вызвать второй URI.Я хотел бы иметь модульные тесты, охватывающие (1) первый URI успешно, (2) первый URI терпит неудачу и второй URI успешно, и (3) оба URI терпят неудачу.Этот код достаточно сложен, поэтому я хочу протестировать эти различные сценарии с помощью JUnit, но для этого мне нужно либо запустить настоящие резервные веб-службы, либо имитировать вызовы API клиента Джерси.

26
задан BennyMcBenBen 12 June 2012 в 22:10
поделиться