Невозможно проверить взаимодействие, Спок интерпретирует '_' (любой параметр) как буквальный '_'. - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь протестировать контроллер 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(_)
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...