在测试中使用ConfigurationProperties和EnableConfigurationProperties的惯用方法是什么?

时间:2016-04-22 03:36:42

标签: spring spring-boot

我正在尝试为spring(-boot)应用程序中使用的某些元素设置单元测试,并且我在ConfigurationPropertiesEnableConfigurationProperties周围进行设置。我最终让它工作的方式似乎与我见过的例子一致,因为我目睹了我的配置类需要ConfigurationPropertiesEnableConfigurationProperties,而这种情况并非如此。似乎是正确的,我希望有人可以提供一些指导。

这是一个简化的例子:

JavaTestConfiguration.java

package com.kerz;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.validation.constraints.NotNull;

@Configuration
@ConfigurationProperties
@EnableConfigurationProperties
public class JavaTestConfiguration {

  public void setFoo(String foo) {
    this.foo = foo;
  }

  @NotNull
  String foo;

  @Bean
  String foo() {
    return foo;
  }
}

JavaTestConfigurationTest.java

package com.kerz;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import static org.junit.Assert.assertEquals;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {JavaTestConfiguration.class})
@TestPropertySource("classpath:test.properties")
public class JavaTestConfigurationTest {

  @Autowired
  String foo;

  @Test
  public void shouldWork() throws Exception {
    assertEquals("foo", "bar", foo);
  }
}

test.properties

foo=bar

1 个答案:

答案 0 :(得分:0)

如果要启动Spring上下文,则测试是更多集成测试。因此,您还应测试生产弹簧配置。

我建议不要创建测试配置。使用一个生产配置进行测试。

您还使用@TestPropertySource注释,当您需要定义测试特定属性时使用该注释。如果您可以使用PROD配置进行测试,请不要使用它。