Как написать тестовый пример для Spring приложения загрузки класса с зависимостью свойств - не удалось разрешить заполнитель - PullRequest
0 голосов
/ 21 июня 2019

Я следовал нижеприведенной странице StackOverflow и написал тестовый пример для класса Application Как протестировать основной класс приложения Spring-boot

Когда я запускаю свой тестовый пример, я получаю следующую ошибку

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'http.client.connection.timeout' in value "${http.client.connection.timeout}"
.....

Я добавил @TestPropertySource ("classpath: test-manifest.yml") в моем тестовом примере.

test-manifest.yml имеет ' http.client.connection.timeout '

Мой тестовый случай

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.mypackage.Application;

@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource("classpath:test-manifest.yml")
@SpringBootTest
public class MainTest {

    @Test
    public void main() {
        Application.main(new String[] {});
    }
}

Как заставить это работать?Любая помощь приветствуется.

1 Ответ

2 голосов
/ 22 июня 2019

TestPropertySource не поддерживает файлы конфигурации yaml.

Чек https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/TestPropertySource.html

Поддерживаемые форматы файлов

Поддерживаются как традиционные, так и основанные на XML форматы файлов свойств, например, "classpath: /com/example/test.properties" или "file: /path/to/file.xml".

Смотри также TestPropertySourceUtils.addPropertiesFilesToEnvironment()

try {
    for (String location : locations) {
        String resolvedLocation = environment.resolveRequiredPlaceholders(location);
        Resource resource = resourceLoader.getResource(resolvedLocation);
        environment.getPropertySources().addFirst(new ResourcePropertySource(resource));
    }
}

ResourcePropertySource может работать только с файлами .properties, но не с .yml. В обычном приложении YamlPropertySourceLoader зарегистрирован и может иметь дело.

Возможные решения:

Измените конфигурацию на .properties или используйте профили для загрузки тестовой конфигурации.

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