【问题标题】:junit spring boot profile properties not being read未读取junit spring boot配置文件属性
【发布时间】:2018-04-28 10:53:13
【问题描述】:

我正在使用 spring boot 从我的 junit 设置中的属性文件中读取一个值。 我无法读取该值。以下是我的内容:-

application-test.properties

my.user.name=Amar

用于创建 bean 的配置文件:

@Configuration
@ActiveProfiles("test")
@Profile("test")
public class RdbmsTestConfig {

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

    @Bean
    public String myString(){
        return "Amar";
    }

    @Bean
    public PropsHolder propsHolder() {
        PropsHolder propsHolder = new PropsHolder();
        propsHolder.setUserName(name);
        return propsHolder;
    }
 }

我的测试课:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = RdbmsTestConfig.class)
@ActiveProfiles("test")
public class TestRoomService {

    @Autowired
    @Qualifier("myString")
    private String myString;

    @Autowired
    private PropsHolder propsHolder;

    @Autowired
    private Environment env;

    @Test
    public void userTest() {
        Arrays.stream(env.getActiveProfiles()).forEach(System.out::println);
        System.out.println(propsHolder.getUserName());
        Assert.assertNotNull(myString);
        Assert.assertEquals("Amar",myString);
    }
}

propsHolder.getUserName 的值是 ${my.user.name}

【问题讨论】:

    标签: java spring spring-boot junit


    【解决方案1】:

    首先从您的班级RdbmsTestConfig 中删除@ActiveProfiles("test")。然后您的测试只是将RdbmsTestConfig 定义为弹簧上下文。如我所见,您没有运行真正的弹簧启动测试。问题是您的 spring 配置中没有配置任何 PropertyPlaceholderConfigurer。因此,如果您有任何 SpringBootApplication,请配置一个 PropertyPlaceholderConfigurer 或将 @SpringBootTest 添加到您的测试中。

    【讨论】:

    • 支持这个答案,因为@SpringBootTest 是缺少的链接
    【解决方案2】:

    我从来没有使用过@Profile(),所以我不确定它是否应该做你想做的事。但我总是使用@PropertySources(),否则,代码应该如何知道在哪里查找属性?

    @Configuration
    @PropertySources(value = { @PropertySource("classpath:core-
    test.properties") })
    

    【讨论】:

    • 我想使用 spring 配置文件来设置一些 bean 和配置以在我测试我的应用程序时运行。感谢您建议的方法。我已经尝试过了,它可以单独使用,但不能与配置文件一起使用。
    【解决方案3】:

    我创建了一个具有所需注释的基础测试类:-

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = RdbmsTestConfig.class)
    @ActiveProfiles("test")
    @SpringBootTest
    public abstract class BastTest { }
    

    @ActiveProfiles 设置要使用的配置文件,我不必在 application.properties 文件中提及它

    我的测试类现在扩展了这个:-

    public class TestRoomService extends BastTest 
    

    在我的 RdbmsTestConfig 中删除 @ActiveProfiles 注释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2020-12-15
      • 2016-04-29
      • 1970-01-01
      • 2019-04-26
      • 2018-10-16
      • 2020-02-14
      相关资源
      最近更新 更多