У меня проблемы с настройкой тестов.Я использую последнюю версию 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, так и в тестах Спока?