编辑:我创建了另一个类“ Utils”,并将函数移至该类。
class Utils {
fun isMaintenanceFileExist(maintenanceFile: String) : Boolean {
/** method to check maintenance file, return True if found else False. */
return File(maintenanceFile).exists()
}
}
我正在测试API并模拟如下方法:
@Test
fun testMaintenanceMode() {
val mockUtil = Mockito.mock(Utils::class.java)
Mockito.`when`(mockUtil.isMaintenanceFileExist("maintenanceFilePath"))
.thenReturn(true)
// Request body
val body = "authId=123&email=a@mail.com&confirmationKey=86b498cb7a94a3555bc6ee1041a1c90a"
// When maintenance mode is on
mvc.perform(MockMvcRequestBuilders.post("/post")
.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)
.content(body))
.andExpect(MockMvcResultMatchers.status().isBadRequest)
.andReturn()
}
但是我没有得到预期的结果。
控制器代码:
{
utilObj = Utils()
...
@PostMapping("/post")
fun registerByMail(@Valid data: RequestData) : ResponseEntity<Any>
{
// check for maintenance mode, if True return (error code : 9001)
if(utilObj.isMaintenanceFileExist("maintenanceFilePath")) {
println("-------- Maintenance file exist. Exiting. --------")
var error = ErrorResponse(Response(ResponseCode.MAINTENANCE,
ResponseCode.MAINTENANCE.toString()))
return ResponseEntity.badRequest().body(error)
}
...
}
我想在测试中从isMaintenanceFileExist()方法返回true,并想检查badRequest。 请指导如何实现。
答案 0 :(得分:3)
通过查看您的代码片段,我猜您实际上并没有在测试中使用模拟的Controller实例。该控制器由Spring Boot测试运行器实例化,而不使用您的模拟实例。
我建议将isMaintenanceFileExist
方法提取到一个单独的bean中,然后使用@MockBean
对其进行模拟。
控制器和实用程序Bean
@RestController
class MyController(@Autowired private val utils: Utils) {
@PostMapping("/post")
fun registerByMail(@RequestBody data: String): ResponseEntity<Any> {
if (utils.isMaintenanceFileExist("maintenanceFilePath")) {
println("-------- Maintenance file exist. Exiting. --------")
return ResponseEntity.badRequest().body("error")
}
return ResponseEntity.ok("ok")
}
}
@Component
class Utils {
fun isMaintenanceFileExist(maintenanceFile: String) = File(maintenanceFile).exists()
}
测试类
@RunWith(SpringRunner::class)
@SpringBootTest
@AutoConfigureMockMvc
class DemoApplicationTests {
@MockBean
private lateinit var utils: Utils
@Autowired
private lateinit var mvc: MockMvc
@Test
fun testMaintenanceMode() {
BDDMockito.given(utils.isMaintenanceFileExist("maintenanceFilePath"))
.willReturn(true)
val body = "test"
mvc.perform(MockMvcRequestBuilders.post("/post")
.contentType(MediaType.TEXT_PLAIN)
.content(body))
.andExpect(MockMvcResultMatchers.status().isBadRequest)
}
}
请参见chapter 44.3.7。