使用SpringBootTest注释

时间:2018-02-27 12:59:24

标签: java spring gradle rest-assured

我使用Spring Boot构建了一个API,到目前为止还有一些与之相关的单元测试。正如预期的那样,这些是在本地运行的,当Jenkins在构建服务器上通过gradle build构建项目时。我正在寻找现在使用rest-assured为项目添加一些集成测试,所以我实际上可以测试请求和响应,但我不太清楚如何将它们添加到项目中。

到目前为止,我已经在src / test中添加了一个integrationTests文件夹,并告诉gradle在gradle buildgradle test时排除有保证的测试,这样我就可以让它们保持独立。我已经设置了一个gradle任务gradle integrationTest来触发集成测试,只要API当前正在运行就可以运行。

显然我可以用@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)注释测试类,以指示spring启动一个嵌入式服务器进行自动测试,但它似乎没有做任何事情,测试只是失败了java.net.ConnectException错误,直到我在另一个窗口中启动API。下面的示例代码有什么问题,或者我错过了其他什么?

com.example.restassured;

import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;

import static io.restassured.RestAssured.*;

@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT) 
public class RunSomeTestsIT {

    @Test public void url_should_return_200_response() {
       get("/v1/test/123456").then().statusCode(200);
    }

}

的build.gradle

task integrationTest(type: Test) {
    include 'com/example/restassured/**'
    // Run all tests each time. Do not cache.
    outputs.upToDateWhen { false } 
}

1 个答案:

答案 0 :(得分:2)

通过共同发生,我是working on something very similar today,希望可以提供一些有用的指示。

当我与this code比较时,我认为你错过了@RunWith(SpringRunner.class)注释!

编辑:除了将测试移动到与“应用程序”类相同的包之外,您可以尝试使用Spring的“第一原则”方法,该方法可以解决Spring注释的所有黑魔法问题。至少你可以更好地解决问题并控制正在发生的事情:

https://github.com/ptrthomas/spring-testing/blob/master/src/test/java/example/HelloE2ERestKarateTest.java