Spring boot v2 没有符合条件的 TestRestTemplate 类型的 bean
Spring boot v2 No qualifying bean of type TestRestTemplate
我在尝试获取 TestRestTemplate 时遇到错误。有没有办法获取 TestRestTemplate 或测试 ErrorController?
错误日志:https://pastebin.com/XVPU9qrb
package io.kuark.ppalli
import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT
import org.springframework.test.context.ActiveProfiles
@ActiveProfiles("test")
@SpringBootTest(classes = [PpalliApi::class], webEnvironment = RANDOM_PORT)
class PpalliApiTest {
@Test
fun contextLoads() {}
}
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest
import org.springframework.boot.test.web.client.TestRestTemplate
import kotlin.test.assertEquals
@WebMvcTest
class FallbackErrorControllerTest {
@Autowired
lateinit var http: TestRestTemplate
@Test
fun handleError() {
val result = http.getForObject("/error", String::class.java);
assertEquals("""{"code": "NOT_FOUND"}""", result)
}
}
使用 @WebMvcTest
时,Spring 启动不会启动嵌入式 Tomcat 服务器,您将无法通过端口访问端点。相反,Spring 启动 configures a mocked servlet environment that you directly interact with using MockMvc
:
@WebMvcTest
class FallbackErrorControllerTest {
@Autowired
lateinit var mockMvc: MockMvc
@Test
fun handleError() {
mockMvc.perform(get("/error")).andExpect(status().isOk);
}
}
MockMvc 甚至自带 Kotlin DSL.
然而,当使用 @SpringBootTest
和 webEnvironment=RANDOM_PORT
时,Spring Boot 将自动配置 Tomcat 并在随机端口上公开您的应用程序。这将是一个真正的 servlet 环境,您可以在其中使用 TestRestTemplate
作为 HTTP 客户端来交互和测试您的端点。
我在尝试获取 TestRestTemplate 时遇到错误。有没有办法获取 TestRestTemplate 或测试 ErrorController?
错误日志:https://pastebin.com/XVPU9qrb
package io.kuark.ppalli
import org.junit.jupiter.api.Test
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT
import org.springframework.test.context.ActiveProfiles
@ActiveProfiles("test")
@SpringBootTest(classes = [PpalliApi::class], webEnvironment = RANDOM_PORT)
class PpalliApiTest {
@Test
fun contextLoads() {}
}
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest
import org.springframework.boot.test.web.client.TestRestTemplate
import kotlin.test.assertEquals
@WebMvcTest
class FallbackErrorControllerTest {
@Autowired
lateinit var http: TestRestTemplate
@Test
fun handleError() {
val result = http.getForObject("/error", String::class.java);
assertEquals("""{"code": "NOT_FOUND"}""", result)
}
}
使用 @WebMvcTest
时,Spring 启动不会启动嵌入式 Tomcat 服务器,您将无法通过端口访问端点。相反,Spring 启动 configures a mocked servlet environment that you directly interact with using MockMvc
:
@WebMvcTest
class FallbackErrorControllerTest {
@Autowired
lateinit var mockMvc: MockMvc
@Test
fun handleError() {
mockMvc.perform(get("/error")).andExpect(status().isOk);
}
}
MockMvc 甚至自带 Kotlin DSL.
然而,当使用 @SpringBootTest
和 webEnvironment=RANDOM_PORT
时,Spring Boot 将自动配置 Tomcat 并在随机端口上公开您的应用程序。这将是一个真正的 servlet 环境,您可以在其中使用 TestRestTemplate
作为 HTTP 客户端来交互和测试您的端点。