LINUX.ORG.RU

Контекст тестов в Spring

 , ,


0

1

Уже два дня пытаюсь решить следующую проблему. Есть приложение на Spring Boot, в нем есть два конвертера, один из которых вызывает другой при необходимости.

Выглядит это так для одного конвертора

// Include goes here
@Service
public class Conv1 implements Converter<Class1, Class2> {
 @Override
 public Class2 convert(Class1 source) {
 //...
 }
}
и для второго
// Include goes here
@Service
public class Conv2 implements Converter<BigClass1, BigClass2> {
 @Autowired
 ConversionService converter;

 @Override
 public BigClass2 convert(BigClass1 source) {
 //...
 result.setClass2Property(converter.convert(source.getClass1Property()));
 //...
 }
}

При попытке прогнать эти классы через юнит-тест вываливается NullPointerException на второй конвертер на моменте вызова первого, при этом объявленный через тот же @Autowired ConversionService в самом юнит-тесте разрешается нормально. Тест выглядит подобным образом

// Imports
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class, loader = SpringApplicationContextLoader.class)
public class Conv2Test {
 @Autowired
 ConversionService converter;

 @Test
 public void testConv2() {
  BigClass1 source = new BigClass1(...);
  BigClass2 target = converter.convert(source, BigClass2.class);
 }
}

В конфиге конверторы регистрируются так

@Bean(name = "conversionService")
public ConversionService getConversionService() {
 ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
 bean.setConverters(getConverters()); // Возвращает Set<Converter>
 bean.afterPropertiesSet();
 ConversionService object = bean.getObject();
 return object;
}

Успел найти что Autowired происходит после создания объекта, но объекты-конверторы создаются в getConverters() в конфиге, и судя по тому что в самом юнит-тесте оно работает - они создаются корректно.

Кто-нибудь сталкивался?

upd: проверил ApplicationContext из конвертора, conversionService там есть и с ним все в порядке. Но Autowire упорно выдает null без всяких дополнительных ошибок

Upd2: кое-как заткнул костылями, тесты ок, зато на старте оно не только находит conversionService, но находит аж 2 разных. Чую я криво инициализирую контекст. Кто-нибудь может ткнуть в пример как он инициализируется для java конфига для тестов?

★★★★★

Последнее исправление: upcFrost (всего исправлений: 4)

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.