#spring-boot #spock #spring-test-mvc
#весенняя загрузка #spock #spring-test-mvc
Вопрос:
Я тестировал 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())
}
}
Итак, проблема в том, что метод mocking в SomeService
экземпляре не работает, потому что он использует другой макет класса для издевательства над экземпляром SomeService
класса. Я попытался обойти использование метода static Mock от Spock в программе установки, а затем использовать установщик для установки SomeService
в контроллере. Мой вопрос, есть ли какой-нибудь элегантный способ использовать @MockBean
с тестированием Spock Specification
.
Ответ №1:
Вам следует использовать @SpringBean вместо @MockBean
. Как говорится в его javadoc:
Вдохновлен Springs @MockBean, но адаптирован к семантике Spock