我使用Spring Boot构建了一个API,到目前为止还有一些与之相关的单元测试。正如预期的那样,这些是在本地运行的,当Jenkins在构建服务器上通过gradle build
构建项目时。我正在寻找现在使用rest-assured为项目添加一些集成测试,所以我实际上可以测试请求和响应,但我不太清楚如何将它们添加到项目中。
到目前为止,我已经在src / test中添加了一个integrationTests文件夹,并告诉gradle在gradle build
或gradle 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 }
}
答案 0 :(得分:2)
通过共同发生,我是working on something very similar today,希望可以提供一些有用的指示。
当我与this code比较时,我认为你错过了@RunWith(SpringRunner.class)
注释!
编辑:除了将测试移动到与“应用程序”类相同的包之外,您可以尝试使用Spring的“第一原则”方法,该方法可以解决Spring注释的所有黑魔法问题。至少你可以更好地解决问题并控制正在发生的事情: