Есть ли способ использовать аннотацию @MockBean при работе с Spock framework

#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