- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 REST (spring-hateoas) 服务器,我想用 JUnit 测试来测试它。因此,我正在使用自动注入(inject)的 TestRestTemplate
。
但是我现在如何向这个预配置的 TestRestTemplate 添加更多配置?我需要配置 rootURI 并添加拦截器。
这是我的 JUnit 测试类:
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class RestEndpointTests {
private Logger log = LoggerFactory.getLogger(this.getClass());
@LocalServerPort
int localServerPort;
@Value(value = "${spring.data.rest.base-path}") // nice trick to get basePath from application.properties
String basePath;
@Autowired
TestRestTemplate client; // how to configure client?
[... here are my @Test methods that use client ...]
}
The documentation sais that a static @TestConfiguration
class can be used.但是在该静态类中我无法访问 localServerPort
或 basePath
:
@TestConfiguration
static class Config {
@Bean
public RestTemplateBuilder restTemplateBuilder() {
String rootUri = "http://localhost:"+localServerPort+basePath; // <=== DOES NOT WORK
log.trace("Creating and configuring RestTemplate for "+rootUri);
return new RestTemplateBuilder()
.basicAuthorization(TestFixtures.USER1_EMAIL, TestFixtures.USER1_PWD)
.errorHandler(new LiquidoTestErrorHandler())
.requestFactory(new HttpComponentsClientHttpRequestFactory())
.additionalInterceptors(new LogRequestInterceptor())
.rootUri(rootUri);
}
}
我最重要的问题:为什么 TestRestTemplate
不考虑 application.properties
中的 spring.data.rest.base-path
首先? beeing complete preconfigured 的想法不是这个包装类的整个用例吗?
医生说
If you are using the @SpringBootTest annotation, a TestRestTemplate is automatically available and can be @Autowired into you test. If you need customizations (for example to adding additional message converters) use a RestTemplateBuilder @Bean.
完整的 Java 代码示例看起来如何?
最佳答案
我知道这是一个老问题,您现在可能已经找到了另一个解决方案。但无论如何,我正在为其他像我一样绊倒的人回答。我有一个类似的问题,并最终在我的测试类中使用 @PostConstruct 来构建一个配置为我喜欢的 TestRestTemplate,而不是使用 @TestConfiguration。
@RunWith(SpringJUnit4ClassRunner.class)
@EnableAutoConfiguration
@SpringBootTest(classes = {BackendApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyCookieClientTest {
@LocalServerPort
int localPort;
@Autowired
RestTemplateBuilder restTemplateBuilder;
private TestRestTemplate template;
@PostConstruct
public void initialize() {
RestTemplate customTemplate = restTemplateBuilder
.rootUri("http://localhost:"+localPort)
....
.build();
this.template = new TestRestTemplate(customTemplate,
null, null, //I don't use basic auth, if you do you can set user, pass here
HttpClientOption.ENABLE_COOKIES); // I needed cookie support in this particular test, you may not have this need
}
}
关于java - 如何配置Spring TestRestTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42272521/
您好,我正在使用 TestRestTemplate 为我的代码实现一些集成测试,在尝试测试端点时我找不到包含查询参数的方法。 这是我尝试过的 2 种不同的测试: @Test @DisplayName(
我有一个 REST (spring-hateoas) 服务器,我想用 JUnit 测试来测试它。因此,我正在使用自动注入(inject)的 TestRestTemplate。 但是我现在如何向这个预配
RestTemplate 与其测试版本有什么区别?当我们通过@ControllerAdvice进行异常处理时,RestTemplate会抛出异常,但对于相同的流程测试版本会返回包含异常详细信息的jso
我有普通的 SpringBoot 应用程序,带有自定义身份验证过滤器,可以正常工作。 但是在集成测试中使用 TestRestTemplate 时遇到问题。 我想在这里检查信用卡错误的用户是否无法登录。
TestRestTemplate 可用于在我们的 Spring Boot 集成测试中发送 http 请求。此类测试通常在 Spring boot 作为随机端口 @LocalServerPort 中的本
我有一个正在使用 kotlin 开发的 spring-boot 应用程序——总体上进展顺利。 ( Spring 1.5.6.RELEASE, Kotlin 1.1.4-3) 无论如何,在查看了一些示例
我有一个在 Tomcat 上运行的 Spring-Boot 应用程序。在其中,我有一个带有请求参数的 RestController。 @RequestMapping(value = "/v1/test
我目前正在使用 Spring Boot 1.5.4 以及 Junit 5 和 Java 8。 我想使用 Junit 的 ParameterizedTest 对存储在 csv 文件中的多个条目设置集成测
我有一个带有 Spring Data Rest 的 Spring Boot 应用程序,我使用 @WebIntegrationTest随着TestRestTemplate在我的集成测试中。测试的基类如下
我有一个 Spring 应用程序的集成测试,它使用 TestRestTemplate 发出请求。每次我发出请求时,模板都会返回一个实体,但 id 始终为空。如果我通过 Postman 执行相同操作,则
我正在学习 Spring Integration 测试并使用 org.springframework.boot.test.web.client.TestRestTemplate。我的 Spring B
//如何将@RequestParam值发送到url enter code here@ApiRestController 公共(public)类 CityController 扩展 BaseContro
我编写了一个 Spring Boot Controller ,用于监听发送到 /orders/ 的 PUT 请求。 在我的集成测试中,我注意到 TestRestTemplate 没有像我预期的那样对
据我所知,MockMvc 只是在测试 Controller,并模拟 Service 层。 同时 RestAssured 和 TestRestTemplate 正在测试我们 API 的运行实例。 这样对
我有一个简单的 Controller ( CODE ) @RestController @RequestMapping("/profiles" , produces = [MediaType.APPL
在我的 springBoot(RELEASE 1.5.20)应用程序中,启用了基本身份验证。我使用以下代码创建了完整的 IT 测试 @RunWith(SpringRunner.class) @Acti
有一个非常轻的 Spring Boot 1.4 项目,生成自 start.spring.io . 尝试使用 TestRestTemplate 为 @RestController 与 @RequestB
我知道这里已经出现过几次类似的问题,但遵循建议的修复方法并没有解决我的问题。 我有一个带有以下端点的简单 Controller : @RequestMapping(method = RequestMe
我正在使用 TestRestTemplate 对我们的产品进行集成测试。 我有一个看起来像这样的测试: @Test public void testDeviceQuery() { Respon
我有一个资源 A,它有一个 Controller ,其中包含一个用于检索分页 A 项目的端点: public ResponseEntity getAllAs( @Pageabl
我是一名优秀的程序员,十分优秀!