簡體   English   中英

如何在不啟動整個上下文的情況下測試 Spring 中的@Configuration class?

[英]How to test @Configuration class in Spring without starting up whole context?

如何在不啟動整個 Spring 上下文 class 的情況下測試我的配置,還是應該這樣做?

@Configuration
public class GaRuConfig {

    @Bean
    public List<GaRu> rules(){
        SSRule rule1 = new SSRule();
        CSRule rule2 = new CSRule();
        DGRule rule3 = new DGRule();
        EGRule rule4 = new EGRule();

        return List.of(rule1, rule2, rule3, rule4);
    }
}

有沒有辦法測試這個 class?

使用AssertJ ,您可以執行以下操作:

public class GaRuConfigTest {

    private GaRuConfig gaRuConfig = new GaRuConfig();

    @Test
    public void shouldReturnCorrectListOfRulesWhenRequested() {
        // Act
        List<GaRu> rules = this.gaRuConfig.rules();

        // Assert
        Assertions.assertThat(rules.stream().filter(rule -> SSRule.class == rule.getClass()).collect(Collectors.toList())).isNotEmpty();
        Assertions.assertThat(rules.stream().filter(rule -> CSRule.class == rule.getClass()).collect(Collectors.toList())).isNotEmpty();
        Assertions.assertThat(rules.stream().filter(rule -> DGRule.class == rule.getClass()).collect(Collectors.toList())).isNotEmpty();
        Assertions.assertThat(rules.stream().filter(rule -> EGRule.class == rule.getClass()).collect(Collectors.toList())).isNotEmpty();
    }
}

您可以僅使用一個(或幾個)配置類啟動 Spring 上下文:

@SpringBootTest
@ContextConfiguration(classes = GaRuConfig.class)
public class GaRuConfigTest {
   @Autowired
   private List<GaRu> rules

   @Test
   public void testSomething() {
      // assertion on the rules
   }
}

這只會啟動具有該配置 class 的 ApplicationContext。

如果您想測試您的配置是否與 Spring 基礎設施結合使用(在您的示例中不是這種情況),這將特別有用。 通過該測試,您可以驗證是否存在List<GaRu>類型的 bean,並且可以將其自動裝配到其他類中。

只啟動應用程序的一部分(與整個應用程序相比)更便宜,並且您仍然可以檢查這部分是否正確自動裝配,可能使用特定的@TestConfiguration而不是您的生產性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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