2016-11-21 2 views
0

Я создал приложение с загрузкой весной 1.4.0, и я хотел бы сделать интернационализацию с помощью файла yaml.Конфигурация тестового модуля SpringBoot

Я создал класс для загрузки конфигурации из файла yaml, как это описано в документации здесь http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties.

Я хотел бы создать тест для проверки того, что мой класс правильно загрузил свойства из файла yaml.

Если мы сохраним пример из документации, как создать единичный тест, который будет загружать файл yaml (с другим именем application.yml) и проверить, что метод getUsername() вернет значение из файла yaml?


Вот код, который я имею, но до сих пор не может загрузить имя пользователя:

@Component 
@ConfigurationProperties(locations = "classpath:mylocalizedprops.yml", prefix="connection") 
public class ConnectionProperties { 

    private String username; 

    // ... getters and setters 

} 

и тестовый класс

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = Application.class) 
public class InternationalizationTest { 
    @Autowired 
    private ConnectionProperties connectionProperties; 

    public void propsShouldBeNotNull() { 
     assertNotNull(connectionProperties); 
    } 

    public void userNameShouldBeCorrect() { 
     assertEquals(connectionProperties.getUsername(), expectedUserName); 
    } 
} 

Я провалил тест userNameShouldBeCorrect. Файл mylocalizedprops.yml находится в папке src/main/resources в структурированном приложении Maven.

+0

Является ли файл в '/ src/test/resources' или' src/main/resources'? Если он находится в 'src/main/resources', вам нужно либо поместить его в тестовые ресурсы, либо загрузить основной источник, как часть ваших наборов тестовых источников. – Adam

+0

Это в src/main/resources, но я думаю, что лучше всего создать его в src/test/resources для тестирования, как я могу это сделать? – jerome

+0

Скопируйте и вставьте файл. Недостатком является то, что теперь вам придется дублировать все. – Adam

ответ

1

Я бы рассмотрел это интеграционный тест, а не единичный тест, потому что вы тестируете взаимодействие между различными компонентами. Независимо от того, как я это сделаю.

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = YourApplication.class) 
public class InternationalizationTests() { 

    @Autowired 
    ConnectionProperties connectionProperties; 

    @Test 
    public void testCorrectTranslationLoaded() { 
    Assert.assertEquals("english-username", connectionProperties.getUsername()); 
    }  

} 

Вы также можете создать тестовую конфигурацию, если хотите, которую вы можете указать для перевода. Тогда вам понадобятся разные классы для тестирования различных конфигураций. См. Документы: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html

+0

Я обновил сообщение с кодом, я не могу загрузить файл должным образом. – jerome