Kotlin Spring WebMvcTest Mockk
Kotlin Spring WebMvcTest Mockk
有没有人遇到 @MockkBean
似乎没有实际工作或至少存根没有通过的问题?
简单的例子:
@RunWith(SpringRunner::class)
@WebMvcTest(controllers = [WidgetController::class])
class WidgetTest {
@Autowired
private lateinit var mockMvc: MockMvc
@MockkBean
private lateinit var widgetService: WidgetService
@Test
fun test() {
val value = objectMapper.readValue<MyWidget>(something()))
every {
widgetService.getWidget(ArgumentMatchers.anyString())
} returns value
mockMvc
.perform(
get(
"/apis/widget/v1/widget"
).contentType(MediaType.APPLICATION_JSON)
)
.andExpect {
JSONAssert.assertEquals(
widgetPayload(),
it.response.contentAsString,
false
)
}
}
}
结果:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is io.mockk.MockKException: no answer found for: WidgetService(com.bondhouse.pms.services.externalportfolios.ExternalPortfoliosService#0 bean#1).getWidget(test)
总是在发帖后 3 分钟找出答案...
确保您没有使用 ArgumentMatcher.any()
导入 Mockito 参数匹配器
我的问题是 @MockkBean
实际上没有按预期工作(只是创建了一个模拟但没有注入它)。我通过在 @TestConfiguration
.
中用 mockk/spyk 手动覆盖 bean 来处理这个问题
有没有人遇到 @MockkBean
似乎没有实际工作或至少存根没有通过的问题?
简单的例子:
@RunWith(SpringRunner::class)
@WebMvcTest(controllers = [WidgetController::class])
class WidgetTest {
@Autowired
private lateinit var mockMvc: MockMvc
@MockkBean
private lateinit var widgetService: WidgetService
@Test
fun test() {
val value = objectMapper.readValue<MyWidget>(something()))
every {
widgetService.getWidget(ArgumentMatchers.anyString())
} returns value
mockMvc
.perform(
get(
"/apis/widget/v1/widget"
).contentType(MediaType.APPLICATION_JSON)
)
.andExpect {
JSONAssert.assertEquals(
widgetPayload(),
it.response.contentAsString,
false
)
}
}
}
结果:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is io.mockk.MockKException: no answer found for: WidgetService(com.bondhouse.pms.services.externalportfolios.ExternalPortfoliosService#0 bean#1).getWidget(test)
总是在发帖后 3 分钟找出答案...
确保您没有使用 ArgumentMatcher.any()
我的问题是 @MockkBean
实际上没有按预期工作(只是创建了一个模拟但没有注入它)。我通过在 @TestConfiguration
.