【发布时间】:2022-10-18 20:16:48
【问题描述】:
@SpringBootTest(properties = "spring.mvc.servlet.path=/test/path")
@AutoConfigureMockMvc
public class MyTest {
@Autowired
private WebTestClient webTestClient
@Test
public void test() {
webTestClient.post()
.uri(URL)
.bodyValue(json)
.exchange()
.expectStatus().isOk()
.expectBody(String.class)
.returnResult()
.getResponseBody();
}
}
@RestController
public class MyController {
@PostMapping
public Object post(HttpServletRequest req) {
System.out.println(req.getServletPath()); //always empty in tests
}
}
这将创建一个MockHttpServletRequest 发送到@RestContoller servlet。
问题:我的 servlet 使用了HttpServletRequest.getServletPath(),但使用上面的WebTestClient 方法总是为空。
问题:如何在我的 junit 测试中显式设置servletPath?
【问题讨论】:
-
使用 Mockito 或其他东西模拟
HttpServletRequest.getServletPath()方法怎么样?你需要来自 httpServletRequest 的其他值吗? -
好吧,但我自己没有创建
MockHttpServletRequest/HttpServletRequest。它是由 Spring 在内部由WebTestClient构建器进程创建的......我必须找到一种方法在WebTestClient发送之前拦截MockHttpServletRequest。 -
如果它被创建为一个空对象,并且模拟它可以覆盖该对象,那么您应该尝试一下吗?
-
是否可以在测试环境中将
spring.mvc.servlet.path设置为某个固定值? -
@stevecross 是的,这是可能的,但
HttpServletRequest.getServletPath()仍然是空的。
标签: java spring spring-boot spring-webflux spring-boot-test