我想测试一些返回重定向(302)的端点。 我想使用 TestRestTemplate 来测试它,但我无法让它不自动遵循重定向。我只想得到响应而不发出重定向请求。
文档说,如果 apache 客户端位于类路径上,它应该默认禁用重定向处理,但我发现情况并非如此。
我尝试添加 apache http 客户端作为依赖项或测试依赖项,但它不起作用。
首先,为什么 TestRestTempalte 不像文档建议的那样工作? 其次有什么方法可以配置它工作吗?
我将在这里添加非常简单的示例代码,复制起来非常简单:
@RestController
public class controller {
@GetMapping(path = "/redirect")
public void redirect(HttpServletResponse response) throws IOException {
response.sendRedirect("/test");
}
@GetMapping(path = "/test")
public String test() {
return "hello";
}
}
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class redirectTest {
@Autowired
TestRestTemplate rest;
@Test
void redirectTest() {
var response = rest.getForEntity("/redirect", String.class);
System.out.println("Response: " + response.getBody());
assertEquals(302, response.getStatusCode().value());
}
}
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.0'
id 'io.spring.dependency-management' version '1.1.6'
}
group = 'example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.apache.httpcomponents:httpclient:4.3.6'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
测试失败,因为它不会自动执行 302 重定向,而是会自动跟随它。
这里有一个关于此问题的线程:https://github.com/spring-projects/spring-boot/issues/27360
您也可以使用 MockMvc 进行此特定测试。