Я пытаюсь протестировать контроллер Spring Boot REST с помощью Spock. Я пытаюсь проверить, что мой метод exportService.exportAll
был вызван один раз при запуске метода exportMentions
контроллера. Я получаю сообщение об ошибке too few invocations for exportService.exportAll(_)
. Я использую _
, так как меня не волнует параметр. Однако он показывает, что метод exportAll
был вызван с другим параметром. Похоже, он интерпретирует _
как буквальную строку "_"
. Есть идеи, что я здесь делаю не так? Мой код ниже.
Трассировка стека ошибок Spock:
Too few invocations for:
1 * exportService.exportAll(_) (0 invocations)
Unmatched invocations (ordered by similarity):
1 * ExportService.exportAll(2020-08-02T14:19:46.439)
instance == target
| | |
| | Mock for type 'ExportService' named 'ExportService'
| false
| 0 differences (100% similarity)
| Mock for type 'ExportService' named 'ExportService'
| Mock for type 'ExportService' named 'ExportService'
Mock for type 'ExportService' named 'ExportService'
at org.spockframework.mock.runtime.InteractionScope.verifyInteractions(InteractionScope.java:104)
at org.spockframework.mock.runtime.MockController.leaveScope(MockController.java:77)
at com.vc.cxsocial.controller.ExportControllerSpec.exportMentions: When export is called exportService.exportAll gets called once(ExportControllerSpec.groovy:119)
Мой тест:
@WebMvcTest(ExportController.class)
class ExportControllerSpec extends Specification {
@Autowired
private MockMvc mvc
@Autowired
private ExportService exportService
@TestConfiguration
static class MockConfig {
def detachedMockFactory = new DetachedMockFactory();
@Bean
ExportService exportService() {
return detachedMockFactory.Mock(ExportService)
}
@Bean
AppConfigProps appConfigProps() {
return detachedMockFactory.Mock(AppConfigProps)
}
@Bean
CxExportRepository cxExportRepository() {
return detachedMockFactory.Mock(CxExportRepository)
}
@Bean
MentionRepository mentionRepository() {
return detachedMockFactory.Mock(MentionRepository)
}
@Bean
JPAQueryFactory jpaQueryFactory() {
return detachedMockFactory.Mock(JPAQueryFactory)
}
@Bean
@Primary
LockProvider lockProvider() {
return detachedMockFactory.Mock(LockProvider)
}
}
@WithMockUser(password = "password")
def "exportMentions: When export is called exportService.exportAll gets called once" () {
given:
def nw = LocalDateTime.now().minusDays(1)
def dt = nw.toString()
when: "calling exportMentions"
// String dt = LocalDateTime.now().minusDays(1).toString()
mvc.perform(get("/mentions").param("exportDate", dt))
then:
1 * exportService.exportAll(_)
}
}