连接拒绝,放心的junit测试用例

时间:2015-08-17 15:33:48

标签: java rest junit rest-assured

下面的测试用例给了我连接被拒绝的异常,当我评论方法体时,它是成功的。所以我相信端口没有问题,但我确定无法确定调用的问题。即使我和其他客户一起检查,也可以自己成功地将书籍作为json返回。

<table class="table">
    <tr>
    <td ng-repeat="(k, obj) in items | orderBy:'key'">{{obj.key}}</td>
  </tr>
</table>

控制器如下所示,

@Test
public void testMe() {      
    get("/book").then().assertThat().contentType(ContentType.JSON);
}

异常追踪,

@RestController
@RequestMapping("/book")
public class BookController {
//Other crud api's are there

   @RequestMapping(method = RequestMethod.GET)
   public Map<String, Object> getAllBooks(){
   List<Book> books = bookRepository.findAll();
   Map<String, Object> response = new LinkedHashMap<String, Object>();
   response.put("totalBooks", books.size());
   response.put("books", books);
   return response;
   }    
}

3 个答案:

答案 0 :(得分:39)

通常我的应用程序在端口8080上运行,但在测试中它似乎在不同的端口上运行(即使我没有改变端口的任何内容)。

对我来说,以下问题解决了这个问题:

将此添加到SpringBootTest:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

获取指定的端口(没有随机端口设置不起作用):

@LocalServerPort
private int port;

使用新端口设置预先确定可靠的测试:

given().port(port).when().get...

OR

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

答案 1 :(得分:3)

REST Assured执行真正的http请求,看起来服务器没有运行(或者它运行在与8080不同的端口上,这是REST Assured正在使用的默认端口)。如果您不想发出真实的http请求,可以查看Spring MockMvc module,这可以说更容易设置。

答案 2 :(得分:0)

我遇到了同样的问题,并使用OKHttp代替HttpClient。这为我解决了这个问题。