![](/img/trans.png)
[英]Springboot unit test set @Configuration Properties dynamically
[英]SpringBoot unit test configuration
我創建了一個 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 文件夾中。
我認為這是一個集成測試,而不是單元測試,因為您正在測試各種組件之間的交互。 無論如何,這是我的做法。
@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
使用 Jmockit 可以輕松完成單元測試
import org.junit.jupiter.api.Test;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ConfigurableApplicationContext;
import mockit.Mock;
import mockit.MockUp;
import mockit.Mocked;
import mockit.Verifications;
class RuleApiApplicationTest {
@Mocked
private ConfigurableApplicationContext mockedContext;
@Test
void testApplicationRun() {
new MockUp<SpringApplication>() {
@Mock
public ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
return mockedContext;
}
};
RuleApiApplication.main(new String[]{});
new Verifications() {{
SpringApplication.run(RuleApiApplication.class, new String[]{});
}};
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.