2016-11-21 171 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