测试弹簧启动休息应用与休息保证

2022-09-01 12:45:03

我已经为此苦苦挣扎了一段时间。我想使用 restAssured 来测试我的 SpringBoot REST 应用程序。

虽然它看起来像容器正确旋转,但请放心(其他任何事情似乎都有问题。

一直以来,我都会收到连接被拒绝异常。

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

}

现在对于奇怪的部分,通过和打印它应该做什么,但正在得到连接拒绝例外。testtest2

任何想法这个设置有什么问题?


答案 1

我会自己回答这个问题。

在花费了额外的时间之后,事实证明已经知道并设置了正确的端口。RestAssured 不会...TestRestTemplate

有了这个,我达到了下面的测试运行没有任何问题的地步。

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

}

我可以发誓我以前尝试过这样做......但我想我确实用了一些其他的注释......


答案 2

根据 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);
    }
}