it-swarm.com.de

testen der Federkissenauflage mit restAssured

Ich habe schon seit einiger Zeit damit zu kämpfen ... Ich möchte restAssured verwenden, um meine SpringBoot REST -Anwendung zu testen.

Es sieht zwar so aus, als würde sich der Container richtig drehen, aber seien Sie versichert (und alles andere scheint Probleme zu haben, wenn Sie ihn erreichen.).

Immer wieder bekomme ich Connection-Ausnahme.

Java.net.ConnectException: Connection refused

at Java.net.PlainSocketImpl.socketConnect(Native Method)
at Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:350)
at Java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:206)
at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:188)
at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:392)
at Java.net.Socket.connect(Socket.Java:589)
...

meine Testklasse:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void test() {
        System.out.println(this.restTemplate.getForEntity("/clothes", List.class));
    }

    @Test
    public void test2() throws InterruptedException {
        given().basePath("/clothes").when().get("").then().statusCode(200);
    }

}

und jetzt für den seltsamen Teil, test übergibt und druckt, was es soll, aber test2 erhält Connection-Ausnahme.

Irgendwelche Ideen, was ist mit diesem Setup falsch?

16
klubi

Ich beantworte diese Frage selbst ..

Nachdem mehr Zeit darauf verwendet wurde, stellte sich heraus, dass TestRestTemplate den richtigen Port bereits kennt und einstellt.

Damit bin ich an einem Punkt angelangt, an dem der Test ohne Probleme abläuft.

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {

    @LocalServerPort
    int port;

    @Before
    public void setUp() {
        RestAssured.port = port;
    }

    @Test
    public void test2() throws InterruptedException {
        given().basePath("/clothes").get("").then().statusCode(200);
    }

}

Ich hätte schwören können, ich habe es schon früher so versucht ... Aber ich schätze, ich habe einige andere Anmerkungen dazu verwendet ...

31
klubi

Basierend auf https://stackoverflow.com/users/2838206/klubi antworten und den Port nicht für jede angeforderte Anforderung festlegen:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {

    @LocalServerPort
    int port;

    @Before
    public void setUp() {
        RestAssured.port = port;
    }

    @Test
    public void test2() throws InterruptedException {
        given().basePath("/clothes").get("").then().statusCode(200);
    }
}
5
Mateus Costa

laufen Sie auf einem nicht standardmäßigen Port, kann es sein? Haben Sie dies in Ihrem versucht? 

@Before public static void init(){ RestAssured.baseURI = "http://localhost"; // replace as appropriate RestAssured.port = 8080; }

3
user3169330

Ich würde empfehlen, @WebMvcTest für diesen Fall zu verwenden.

<dependency>
            <groupId>com.jayway.restassured</groupId>
            <artifactId>spring-mock-mvc</artifactId>
            <version>${rest-assured.version}</version>
            <scope>test</scope>
</dependency>

Wenn Sie @SpringBootTest verwenden, um zu testen, ob ein Controller Overhead ist, werden alle redundanten Beans wie @Component, @Service usw. erstellt und ein Vollständiger HTTP-Server gestartet. Für weitere Details: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-testing-spring-boot-applications-testing-autoconfigured- MVC-Tests ;

  @RunWith(SpringRunner.class)
  @WebMvcTest(value = SizesRestController.class)
  public class SizesRestControllerIT {

     @Autowired
     private MockMvc mvc;

     @Before
     public void setUp() {
        RestAssuredMockMvc.mockMvc(mvc);
     }

     @Test
     public void test() {
        RestAssuredMockMvc.given()
           .when()
           .get("/clothes")
           .then()
           .statusCode(200);
        // do some asserts
     }
 }
1
idmitriev

Ich hatte das gleiche Problem. Der Server führte die App auf dem Port 34965 (nicht 8080) aus.

Das hat mein Problem gelöst: 

@Autowired
ServerProperties serverProperties;

@Autowired
Environment environment;

public String getPath() {
    final int port = environment.getProperty("local.server.port", Integer.class);

    return "http://localhost:" + port;
}

@Before
public void setUp() throws Exception {
    RestAssured.baseURI = getPath();
}

@Test
public void testResponse(){
    response = get("/books");
}
0
Amine Soumiaa

Einfach:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT)
public class CommonScenarioTest {

    @BeforeClass
    public static void setup() {
        RestAssured.baseURI = "http://localhost/foo";
        RestAssured.port = 8090;
    }
0
erik