Как получить свойства, вводимые в тестовый класс в Spring Boot? - PullRequest
1 голос
/ 09 октября 2019

Как я могу загрузить свойства из своего application-test.properties в мой тестовый класс в Spring Boot? Я делаю что-то не так, но не могу понять это?

Я могу получить свойства из application.properties для моего класса конфигурации, указанного ниже

package org.vinodh.testing;

import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import lombok.Data;

@Configuration
@ConfigurationProperties(prefix = "caching")
@Data
public class CachingConfig {

    @Value("${caching.name}")
    private String name;

    @Data
    public static class CacheSpec {
        private int minutesToExpire;
        private int maximumSize;

    }

    private Map<String, CacheSpec> specs;

    @Bean
    public void test() {
        System.out.println(name);
        System.out.println(specs);
    }

}

, но когда я пытаюсьсделать то же самое в тестовом классе получаю ноль см. код ниже. Как получить тестовый класс для печати значений из файла свойств?

package org.vinodh.testing;

import java.util.Map;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;

import lombok.Data;

@RunWith(SpringRunner.class)
@ContextConfiguration
@ConfigurationProperties(prefix = "caching")
@TestPropertySource("/application-test.properties")
@Data
public class CachingConfigTest {

    @Value("${caching.name}")
    private String name;

    @Data
    public static class CacheSpec {
        private int minutesToExpire;
        private int maximumSize;
    }

    private Map<String, CacheSpec> specs;

    @Test
    public void test() {
        System.out.println(name);
        System.out.println(specs);
    }

}

application.properties

caching.specs.test.minutesToExpire=10
caching.specs.test.maximumSize=10
caching.name=Vinodh

application-test.properties

caching.specs.test.minutesToExpire=10
caching.specs.test.maximumSize=10
caching.name=Vinodh

Ответы [ 2 ]

1 голос
/ 09 октября 2019

На самом деле вам не нужно создавать CacheSpec в тестовом классе, что также не рекомендуется, вы можете использовать оригинальный из исходного пакета. Но просто добавьте getter к частной карте specs в CachingConfig

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
@Profile("test")
public class CachingConfigTest {

    @Autowired
    private CachingConfig cachingConfig;

    @Test
    public void test() {
        System.out.println(cachingConfig.getSpecs());
     }

 }

А также вам не нужно @TestPropertySource, вы можете просто использовать @Profile для загрузки тестового профиля и @ActiveProfile сделать test активным профилем для этого тестового класса

0 голосов
/ 09 октября 2019

Попробуйте это spring.config.additional-location = classpath: /application-test.properties

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