我正在尝试Spock,在编写控制器测试时遇到了一个有趣的问题。
WebMvcTest(value = SomeController.class)
@AutoConfigureMockMvc
@ActiveProfiles(value = "restapi")
@Import(value = SecurityConfiguration)
class AccountBalanceControllerTest extends Specification {
@Autowired
SomeController someController
@MockBean
SomeService someService
def "lets test it" {
given:
someService.findAllByName(_) >> ["Some", "Work"]
when:
def response = mockMvc.perform(get("/v1/someName/545465?fast=false").with(user("mvc-test").roles("SOME_ACCOUNTS")))
then:
response.andExpect(status().isOk())
}
}
因此问题是SomeService
实例上的模拟方法不起作用,因为它使用不同的Mock类来模拟SomeService
类的实例。我在设置中使用了Spock中的静态Mock方法,然后使用了setter在控制器中设置SomeService
来解决。我的问题是在Spock @MockBean
测试中使用Specification
的任何优雅方法。