2016-11-17 37 views
8

Od pewnego czasu borykam się z tym problemem. Chciałbym użyć restAssured do przetestowania mojej aplikacji REST SpringBoot.testowanie wiosennej aplikacji do odpoczynku z restAssured

Choć wygląda jak pojemnik obraca się prawidłowo, pewny (i coś jeszcze zdaje się mieć problemy z dotarciem do niego.

Cały czas dostaję Connection refused wyjątek.

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) 
... 

moja klasa Test:

@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); 
    } 

} 

i teraz dziwne strony, test przechodzi i druki, co powinno, ale jest coraz C test2 odmowa przyjęcia odmowy.

Jakieś pomysły na temat tej konfiguracji?

Odpowiedz

21

będę sobie odpowiedzieć na to pytanie ..

Po spędzeniu dodatkową ilość czasu na to okazało się, że TestRestTemplate już wie i ustawia właściwy port. RestAssured nie ...

Dzięki temu doszedłem do punktu, w którym poniżej przebiega bez żadnych problemów.

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

    @LocalServerPort 
    int port; 

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

} 

Mógłbym przysiąc Próbowałem robić to w ten sposób wcześniej ... Ale myślę, że nie korzystać z innych adnotacji z tym ...

-1

Przechodząc "/clothes" jako parametr, aby uzyskać() metoda powinna rozwiązać problem

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

niestety to nic nie – klubi

2

są uruchomione na jakimś niestandardowym porcie może być? masz próbował tego w swojej

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

+0

zmienić 'SpringBootTest.WebEnvironment.RANDOM_PORT' powoduje aplikację do uruchomienia na innym porcie każdorazowo – klubi

+0

następnie może być ' @Value (” $ {local.server.port} ") int port; @Before public static void init() { RestAssured.baseURI = "http: // localhost"; // zamień w razie potrzeby RestAssured.port = port; } ' – user3169330

0

prostu:

@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

podstawie https://stackoverflow.com/users/2838206/klubi odpowiedź i nie ustawić port dla każdego wniosku, że zrobić:

@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); 
    } 
} 
0

bym recomme nd używać @WebMvcTest dla tej sprawy, co potrzebne jest, aby mieć pewność, makiety mvc Zależność:

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

Korzystanie z @SpringBootTest przetestować tylko kontroler jest w górze, wszystkie zbędne fasolę, jak @Component, @Service, itp, będzie Zostanie utworzony i zostanie uruchomiony pełny serwer HTTP . Aby uzyskać więcej informacji: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-testing-spring-boot-applications-testing-autoconfigured-mvc-tests;

0

Miałem ten sam problem, na serwerze działała aplikacja na porcie 34965 (nie 8080).

to rozwiązać mój problem:

@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"); 
}