Я пробовал Спока и столкнулся с интересной проблемой при написании тестов контроллера.
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
. Я нашел способ использовать статический метод Mock из Спока в настройке, а затем с помощью установщика установить SomeService
в контроллере. У меня вопрос, есть ли какой-нибудь элегантный способ использовать @MockBean
с тестированием Спока Specification
.