@TestPropertySource Class Не удалось разрешить заполнитель - PullRequest
0 голосов
/ 11 июля 2020

Я создаю TestClass, используя класс Propiedades с аннотацией @PropertySource.

@Component
@PropertySource("file:${services.properties}test-app/.properties")
public class Propiedades {

    @Value("${db.name}")
    public String dbName;

    @Value("${db.jndi}")
    public String dbJNDI;

    @Value("${db.owner}")
    public String dbOwner;

}

Как видите, я загружаю файл .properties из внешнего местоположения относительно сервер, на котором развернуто приложение. services.properties - это переменная env для сервера, у которого есть маршрут к указанной папке c.

Вот мой тестовый класс

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = Propiedades.class)
@TestPropertySource(locations = "/application-test.properties")
public class IncidenciaServicioServiceImplTest {

    @Autowired
    Propiedades propiedades;
    
    @Test
    public void isPropertySetup() {
        String output = propiedades.dbName;
        
        Assert.assertEquals("testDb", output);
    }
    
}

При запуске теста я получаю следующее ошибка.

java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [Propiedades]; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'services.properties' in value "file:${services.properties}test-app/.properties"

Почему он пытается загрузить свойства из этого пути? Разве он не должен читать из src/test/resources/application-test.properties?

1 Ответ

0 голосов
/ 13 июля 2020

Насколько я знаю, Spring работает не так, как вы ожидаете. Он всегда пытается сначала загрузить свойства, указанные в @PropertySource, а затем переопределяет их значениями, указанными в аннотации @TestPropertySource.

Таким образом, один из способов решения вашей проблемы - использовать флаг ignoreResourceNotFound для @PropertySource аннотация:

@PropertySource("file:${services.properties}test-app/.properties", ignoreResourceNotFound = true)
public class Propiedades {
   // ... your properties
}

В этом случае Spring проигнорирует тот факт, что он не может найти свойства, указанные с помощью @PropertySource, и продолжит использовать значения из @TestPropertySource

Или, альтернативно, вы необходимо указать значение переменной env ${services.properties} во время выполнения тестов, чтобы было разрешено исправить путь к файлу свойств.

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