2016-11-21 173 views
0

我创建了一个弹簧引导1.4.0应用和我想使用YAML文件internationlize它。SpringBoot单元测试配置

我创建了一个类像它在文档中这里http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties解释加载从YAML文件中的配置。

我想创建一个测试来检查我的课已经正确地加载从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文件夹中。

+0

是在'/ src目录/测试/ 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