Тестирование Spring-cloud-контрактов не работает для JAXRSCLIENT - PullRequest
0 голосов
/ 09 января 2020

Что касается нити ( Spring Cloud Contract с Джерси ), я пытался проверить контракт на контроллере Джерси. К сожалению, плагин maven генерирует тесты, которые не компилируются.

Мой pom имеет плагин, как показано ниже

             <plugin>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-contract-maven-plugin</artifactId>
                <version>2.2.1.RELEASE</version>
                <configuration>
                    <baseClassForTests>com.ing.api.orderapi.contractverifier.ContractVerifierBaseClass</baseClassForTests>
                    <testFramework>JUNIT5</testFramework>
                    <testMode>JAXRSCLIENT</testMode>
                </configuration>
            </plugin>

И сгенерированный тест

@SuppressWarnings("rawtypes")
public class ContractVerifierTest extends ContractVerifierBaseClass {

    @Test
    public void validate_get_products() throws Exception {

        // when:
            Response response = webTarget
                            .path("/products")
                            .request()
                            .build("GET")
                            .invoke();

        // then:
            assertThat(response.getStatus()).isEqualTo(200);
    }

}

webTarget в тесте не может быть решена. Добрый совет.

1 Ответ

2 голосов
/ 09 января 2020

Пожалуйста, проверьте этот образец https://github.com/spring-cloud-samples/spring-cloud-contract-samples/tree/master/producer_jaxrs

Код не компилируется, потому что вы не определили веб-цель. Пример

package com.example;

import java.net.URI;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.UriBuilder;

import com.example.beerapiproducerjaxrs.FraudDetectionController;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.client.ClientConfig;
import org.junit.AfterClass;
import org.junit.BeforeClass;

import static org.springframework.util.SocketUtils.findAvailableTcpPort;

/**
 * Example of using pure Jersey / Jetty API / no Spring to setup the tests.
 */
public class BeerRestBase {
    public static WebTarget webTarget;

    private static Server server;

    private static Client client;

    @BeforeClass
    public static void setupTest() throws Exception {
        int port = findAvailableTcpPort(10000);
        URI baseUri = UriBuilder.fromUri("http://localhost").port(port).build();
        // Create Server
        server = new Server(port);
        // Configure ServletContextHandler
        ServletContextHandler context = new ServletContextHandler(
                ServletContextHandler.SESSIONS);
        context.setContextPath("/");
        server.setHandler(context);
        // Create Servlet Container
        ServletHolder jerseyServlet = context
                .addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
        jerseyServlet.setInitOrder(0);
        // Tells the Jersey Servlet which REST service/class to load.
        jerseyServlet.setInitParameter("jersey.config.server.provider.classnames",
                FraudDetectionController.class.getCanonicalName());
        // Start the server
        server.start();
        ClientConfig clientConfig = new ClientConfig();
        client = ClientBuilder.newClient(clientConfig);
        webTarget = client.target(baseUri);
        try {
            server.start();
        }
        catch (Exception ex) {
            throw new IllegalStateException(ex);
        }
    }

    @AfterClass
    public static void cleanupTest() {
        if (client != null) {
            client.close();
        }
        if (server != null) {
            try {
                server.stop();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
...