@TestPropertySource - значения не установлены / не установлены как null из файла свойств теста

Мой Junit не выбирает свойства, заданные в файле свойств теста. Я не получаю ошибки, но значение, возвращаемое из файла свойств, равно null

КЛАСС ДЛЯ ТЕСТИРОВАНИЯ:

package com.abc.mysource.mypackage;

@Component
@ComponentScan
public class MyHelper {

    @Autowired
    @Qualifier("commonProperties")
    private CommonProperties commonProperties;  

    public LocalDateTime method1ThatUsesCommonProperties(LocalDateTime startDateTime) throws Exception {
        String customUserType = commonProperties.getUserType(); // Returns null if run as JUnit test
        //Further processing
    }
}

ПОДДЕРЖИВАЕМЫЕ КОМПОНЕНТЫ - КЛАССЫ БИНОВ И КОНФИГУРАЦИИ:

package com.abc.mysource.mypackage;
@Component
public class CommonProperties {
     @Value("${myhelper.userType}")
     private String userType;

         public String getUserType() {
        return userType;
    }
    public void setCalendarType(String userType) {
        this.userType = userType;
    }
}

КЛАСС КОНФИГУРАЦИИ:

package com.abc.mysource.mypackage;
@Configuration
@ComponentScan(basePackages ="com.abc.mysource.mypackage.*")
@PropertySource("classpath:default.properties")
public class CommonConfig {}

default.properties в src / main / resources

myhelper.userType=PRIORITY

МОЙ ТЕСТОВЫЙ КЛАСС:

package com.abc.mysource.mypackage.test;
@RunWith(SpringRunner.class)
@ContextConfiguration(classes=MyHelper.class)
@TestPropertySource("classpath:default-test.properties")
@EnableConfigurationProperties
public class MyHelperTest {
    @MockBean(name="commonProperties")
    private CommonProperties commonProperties;

    @Autowired
    private MyHelper myHelper;

    @Test
    public void testMethod1ThatUsesCommonProperties() {
        myHelper.method1ThatUsesCommonProperties();
    }
}

default-test.properties, определенные в / src / test / resources:

myhelper.userType=COMMON

ПРИМЕЧАНИЕ.

Я переместил default-test.properties в / src / main / resources - commonProperties.getUserType () имеет значение null

Я даже использовал @TestPropertySource (properties = {"myhelper.userType = COMMON"}). Тот же результат

ПРИМЕЧАНИЕ 2:

Я попробовал решение на @TestPropertySource не загружает свойства.

Это решение требует, чтобы я создал дублированный bean-компонент с именем CommonProperties в src / test / java. Но @MockBean терпит неудачу, когда я это делаю

@MockBean(name="commonProperties")
private CommonProperties commonProperties;

Пожалуйста, не отмечайте дубликат.

ПРИМЕЧАНИЕ 3: Mine - это пружина, а не приложение для весенней загрузки.


person Deepboy    schedule 17.10.2018    source источник
comment
Ваш вопрос мне помог, спасибо.   -  person pzelenovic    schedule 14.08.2020


Ответы (1)


MockBeans подходят, если вам не нужно конкретное состояние. Обычно этот компонент является «изолированным», и каждый вызов метода этого компонента будет иметь один и тот же результат. Он «изолирован» -> служба, использующая аннотацию @Value, не будет применяться к этому bean-компоненту.

Вам нужен "нормальный" bean-компонент, правильно сконструированный и инициализированный. Используйте аннотацию @Autowired и при необходимости определите другой bean-компонент, используя тестовый профиль.

person Adina Rolea    schedule 17.10.2018
comment
Изменение MockBean - ›Autowired устранила эту проблему. - person Deepboy; 17.10.2018