Не могу вставлять зависимости Spring одновременно в Спока и Spring - PullRequest
0 голосов
/ 02 февраля 2019

У меня проблемы с настройкой тестов.Я использую последнюю версию SpringBoot и Spock Framework.Прежде всего, я не настраиваю свои бобы «традиционным» способом.Все мои классы в пакете, кроме Facade, имеют пакетную область.Я не использую @Component, @Service и т. Д.

Единственный класс, который я ввожу, это Repository.Позвольте мне показать вам мой Configuration класс

@Configuration
class SurveyConfiguration {
    @Bean
    SurveyFacade surveyFacade(SurveyRepository surveyRepository) {
        ConversionUtils conversionUtils = new ConversionUtils();
        SurveyValidator surveyValidator = new SurveyValidator();
        SurveyCreator surveyCreator = new SurveyCreator(surveyRepository, conversionUtils, surveyValidator);
        return new SurveyFacade(surveyCreator);
    }
}

Он работает нормально, я проверил все сценарии вручную (отправив POST в определенную конечную точку).Позвольте мне показать вам пример метода из класса SurveyCreator, который я хочу протестировать.

SurveyDTO createSurvey(final SurveyDTO surveyDTO) throws ValidationException, PersistenceException {
    Survey survey = conversionUtils.surveyToEntity(surveyDTO);
    surveyValidator.validate(survey);        
    Optional<Survey> savedInstance = Optional.ofNullable(surveyRepository.save(survey)); //Will throw NullPtr
    return savedInstance.map(conversionUtils::surveyToDTO)
            .orElseThrow(PersistenceException::new);
}

Как я уже говорил, во время выполнения он работает нормально.Итак, давайте перейдем к тестам

@SpringBootTest
class SurveyFacadeTest extends Specification {
    @Autowired
    private SurveyRepository surveyRepository
    private SurveyFacade surveyFacade = new SurveyConfiguration().surveyFacade(this.surveyRepository)

    def "should inject beans"() {
        expect:
            surveyRepository != null
            surveyFacade != null
    }
    def "should create survey and return id"() {
        given:
           Long id
        when:
            id = surveyFacade.createSurvey(SampleSurveys.validSurvey())
        then:
            id != surveyFacade
    }
}

Первый тест пройден, так что я понимаю, что у меня все в порядке с тестами.Но я получаю NullPointer в своем коде Java в методе, который я опубликовал выше.Похоже, что SurveyRepository не внедряется в код Java во время тестов, потому что именно это вызывает это исключение ... Есть идеи, как обойти это, чтобы мой Repository был внедрен как в приложениях Spring, так и в тестах Спока?

1 Ответ

0 голосов
/ 03 февраля 2019

Если нет причин против, я рекомендую запустить тест для «базового компонента» (а не для экземпляра, созданного вручную):

@Autowired
private SurveyFacade surveyFacade;
...