2016-05-16 6 views
0

Я пытаюсь получить wiremock, чтобы вернуть статус 200 с простым запросом в своих модульных тестах, однако этот модульный тест всегда возвращает ошибку 404.Тесты Wiremock всегда получают 404 по простому запросу

Как это можно решить?

import static com.github.tomakehurst.wiremock.client.WireMock.*; 
import static org.junit.Assert.assertTrue; 

import com.github.tomakehurst.wiremock.junit.WireMockRule; 
import org.junit.Rule; 
import org.junit.Test; 

import java.net.HttpURLConnection; 
import java.net.URL; 

public class WiremockTest { 

@Rule 
public WireMockRule wireMockRule = new WireMockRule(8089); // No-args constructor defaults to port 8080 

@Test 
public void exampleTest() throws Exception { 
    stubFor(get(urlPathMatching("/my/resource[0-9]+")) 
      .willReturn(aResponse() 
        .withStatus(200) 
        .withHeader("Content-Type", "text/xml") 
        .withBody("<response>Some content</response>"))); 

    int result = sendGet("http://localhost/my/resource/121"); 
    assertTrue(200 == result); 

    //verify(getRequestedFor(urlMatching("/my/resource/[a-z0-9]+"))); 
} 

private int sendGet(String url) throws Exception { 
    URL obj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

    // optional default is GET 
    con.setRequestMethod("GET"); 

    int responseCode = con.getResponseCode(); 
    return responseCode; 

} 
} 
} 

ответ

1

Использование предоставленный код, сначала я должен был справиться с java.net.ConnectionException, который бросают. URL вашего теста нужен порт на localhost. sendGet("http://localhost:8089/my/resource/121")

После этого я думаю, что причина, по которой вы получаете 404, заключается в том, что ваше регулярное выражение не соответствует вашему тестовому URL-адресу.

urlPathMatching("/my/resource[0-9]+")

должен быть

urlPathMatching("/my/resource/[0-9]+")

примечание дополнительный путь разделитель между 'ресурсом' и '[0-9] +'

онлайн инструменты для регулярных выражений тестирование, например, regex101, может использоваться для тестирования поведения, соответствующего шаблону. (Помните, чтобы избежать ваши слеша)

Выкройка: \/my\/resource\/[0-9]+

Тест Строка: http://localhost:8089/my/resource/121

Надежда, что помогает!

+0

Когда я установил порт на 8089, он работает хорошо. Однако для большей картины у меня есть встроенный Tomcat Server, который работает во время моих модульных тестов. И когда я даю правилу wiremock тот же порт, что и сервер tomcat, тогда я получу ошибку привязки, поскольку порт уже используется сервером tomcat. Есть ли способ заставить это работать для запросов, поступающих в порт tomcat? – dwardu

+1

С правилом правила Wiremock по умолчанию я не думаю, что то, что вы просите, может быть сделано в контексте Junit. Могут быть другие доступные варианты, но я не очень хорошо знаком с этим контекстом. Мое самое лучшее предложение состояло бы в том, чтобы пройти документацию по wiremock и посмотреть, не может ли что-нибудь соответствовать вашему прецеденту. http://wiremock.org/getting-started.html – Jeremiah

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

  • Нет связанных вопросов^_^