簡體   English   中英

SpringBoot 單元測試配置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM