SpringBoot单元测试配置

时间:2016-11-21 17:31:56

标签: java spring unit-testing spring-boot

我创建了一个spring-boot 1.4.0应用程序,我想使用yaml文件进行国际化。

我创建了一个用于从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位于Maven结构化应用程序的src / main / resources文件夹中。

1 个答案:

答案 0 :(得分: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