2016-11-17 90 views
8

我一直在努力與此一段時間了。 我想用restAssured來測試我的SpringBoot REST應用程序。測試春季開機休息應用程序restAssured

雖然它看起來像集裝箱正常旋轉起來,放心(和別的似乎已經深入到它的問題。

所有的時間我得到拒絕連接例外。

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

我的測試類:

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

} 

現在對於怪異的一部分,test通行證和打印什麼應該,但test2越來越ç連鎖拒絕例外。

任何想法這個設置有什麼問題?

回答

21

我來回答這個問題,我自己..

在花費時間更多的量之後事實證明,TestRestTemplate已經知道,並設置適當的端口。 RestAssured沒有...

因此,我得到了一個點,低於測試運行沒有任何問題。

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

} 

我可以發誓,我以前試過這樣做......但我想我沒有使用一些其他註釋本...

-1

傳遞"/clothes"作爲參數傳遞給get()方法應該可以解決

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

不幸的是這並沒有改變任何東西 – klubi

2

你一些非標準端口上運行可能是問題? 有你在嘗試這個你

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

+0

'SpringBootTest.WebEnvironment.RANDOM_PORT'導致應用不同的端口則每次 – klubi

+0

可能是上運行, ' @Value(」 $ {local.server.port}「) int port; (){ RestAssured.baseURI =「http:// localhost」; //根據需要替換 RestAssured.port = port; } ' – user3169330

0

簡單:基於

@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

https://stackoverflow.com/users/2838206/klubi回答,並且不爲每個請求設置端口:

@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

我會推薦次使用@WebMvcTest的情況下,所有你需要的是有放心模擬MVC依賴性:

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

使用的@SpringBootTest測試只是一個控制器的開銷,所有多餘的豆類,如@Component@Service等,將被創建並且一個完整的HTTP服務器將被啓動。欲瞭解更多詳情: 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 
    } 
} 
0

我有同樣的問題,服務器在端口34965(不是8080)上運行應用程序。

這解決了我的問題:

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