Есть ли способ использовать аннотацию @MockBean при работе с Spock framework - PullRequest
0 голосов
/ 06 марта 2019

Я пробовал Спока и столкнулся с интересной проблемой при написании тестов контроллера.

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.

1 Ответ

0 голосов
/ 12 марта 2019

Вы должны использовать @ SpringBean вместо @MockBean.Как говорит его Javadoc:

Вдохновленный Springs @MockBean, но адаптированный к семантике Спока

...