Как написать JUnit для операции Spring Integration DSL Http.outboundGateway - PullRequest
0 голосов
/ 30 октября 2018

Как написать JUnit для следующей операции Http.outboundGateway Spring Integration DSL:

    integrationFlowBuilder
       .from(integerMessageSource(),
            c -> c.poller(Pollers.cron("0 0/1 * 1/1 * ?")
       .handle(Http
            .outboundGateway("http://localhost:8050/greeting")
            .httpMethod(HttpMethod.GET)
            .expectedResponseType(String.class))
       .channel("getChannel");

    flowContext.registration(integrationFlowBuilder.get()).register();

Метод integerMessageSource -

    @Bean
    private MethodInvokingMessageSource integerMessageSource() {
        final MethodInvokingMessageSource source = new MethodInvokingMessageSource();
        source.setObject(new AtomicInteger());
        source.setMethodName("getAndIncrement");
        return source;
    }

Я хочу запустить JUnit с некоторым выражением cron и убедиться, что вызывается URL-адрес "http://localhost:8050/greeting". Было бы хорошо, чтобы сервер в URL-адресе http://localhost:8050/greeting был посмеян так, чтобы он отвечает какой-то ответ.

С помощью операции POST я хочу проверить, что некоторый JSON отправляется на URL http://localhost:8050/greeting.

Возможно ли это проверить?

1 Ответ

0 голосов
/ 30 октября 2018

Для тестирования REST на стороне клиента Spring Test Framework предоставляет следующее:

<code>/**
 * <strong>Main entry point for client-side REST testing</strong>. Used for tests
 * that involve direct or indirect use of the {@link RestTemplate}. Provides a
 * way to set up expected requests that will be performed through the
 * {@code RestTemplate} as well as mock responses to send back thus removing the
 * need for an actual server.
 *
 * <p>Below is an example that assumes static imports from
 * {@code MockRestRequestMatchers}, {@code MockRestResponseCreators},
 * and {@code ExpectedCount}:
 *
 * <pre class="code">
 * RestTemplate restTemplate = new RestTemplate()
 * MockRestServiceServer server = MockRestServiceServer.bindTo(restTemplate).build();
 *
 * server.expect(manyTimes(), requestTo("/hotels/42")).andExpect(method(HttpMethod.GET))
 *     .andRespond(withSuccess("{ \"id\" : \"42\", \"name\" : \"Holiday Inn\"}", MediaType.APPLICATION_JSON));
 *
 * Hotel hotel = restTemplate.getForObject("/hotels/{id}", Hotel.class, 42);
 * &#47;&#47; Use the hotel instance...
 *
 * // Verify all expectations met
 * server.verify();
 * 
* *

Обратите внимание, что в качестве альтернативы вышеупомянутому вы также можете установить * {@link MockMvcClientHttpRequestFactory} на {@code RestTemplate}, который * позволяет выполнять запросы к экземпляру * {@link org.springframework.test.web.servlet.MockMvc MockMvc}. * * @author Крейг Уоллс * @author Россен Стоянчев * @ с 3.2 * / @SuppressWarnings ( "устаревание") открытый финальный класс MockRestServiceServer {

Http.outboundGateway() можно настроить с помощью RestTemplate, и этот должен использоваться для этого MockRestServiceServer. Примерно так:

@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext
public class OutboundResponseTypeTests {

    @Autowired
    private RestTemplate restTemplate;

        private MockRestServiceServer mockServer;

    @Before
    public void setup() {
        this.mockServer = MockRestServiceServer.createServer(this.restTemplate);
    }

    @Test
    public void testDefaultResponseType() throws Exception {
        this.mockServer.expect(requestTo("/testApps/outboundResponse"))
                .andExpect(method(HttpMethod.POST))
                .andRespond(withSuccess(HttpMethod.POST.name(), MediaType.TEXT_PLAIN));

        ...

        this.mockServer.verify();
    }

}

См. Док для получения дополнительной информации: https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-mvc-test-client

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...