这是设置配置的
BaseTest
抽象类:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public abstract class BaseIntegration {
@Value("${local.server.port}")
private int serverPort;
@Before
public void setup() {
RestAssured.port = serverPort;
}}
测试课程非常简单:
public class TestIT extends BaseIntegration{//Test Code}
RestClient
使用 RestAssured
创建:
public static TestResponse postResponse(TestRequest request) {
return given().log().all()
.contentType(ContentType.JSON)
.body(request)
.when()
.log().all()
.post("/weather")
.as(TestResponse.class);
}
当测试在 teamcity 中运行时,错误日志如下所示:
java.lang.IllegalArgumentException: URI must not be null
at org.springframework.util.Assert.notNull(Assert.java:134) ~[spring-core-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.util.UriComponentsBuilder.fromUriString(UriComponentsBuilder.java:189) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.util.DefaultUriTemplateHandler.initUriComponentsBuilder(DefaultUriTemplateHandler.java:114) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.util.DefaultUriTemplateHandler.expandInternal(DefaultUriTemplateHandler.java:103) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.util.AbstractUriTemplateHandler.expand(AbstractUriTemplateHandler.java:106) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:612) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:407) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
我没有使用
RestTemplate
或 TestRestTemplate
。还有另一个测试正在使用它,并且该测试运行良好。我无法理解是什么原因导致了这个问题。
编辑:
服务端点似乎正在使用
RestTemplate
restTemplate.postForEntity(url, body, TestResponse.class);
调用端点时,我的测试失败。我认为
RestTemplate
和 RestAssured
库存在一些兼容性问题。
您已经复制了
.log().all()
。
return given().log().all()
.contentType(ContentType.JSON)
.body(request)
.when()
.post("/weather")
.andReturn()
.as(TestResponse.class);