如何在不啟動整個 Spring 背景關系類的情況下測驗我的配置,或者我應該這樣做嗎?
@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);
}
}
有沒有辦法測驗這個類?
uj5u.com熱心網友回復:
使用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();
Assertions.assertThat(rules).hasSize(4);
Assertions.assertThat(SSRule.class == rules.get(0).getClass()).isTrue();
Assertions.assertThat(CSRule.class == rules.get(1).getClass()).isTrue();
Assertions.assertThat(DGRule.class == rules.get(2).getClass()).isTrue();
Assertions.assertThat(EGRule.class == rules.get(3).getClass()).isTrue();
}
}
uj5u.com熱心網友回復:
您可以僅使用一個(或幾個)配置類來啟動 Spring Context:
@SpringBootTest
@ContextConfiguration(classes = {GaRuConfig.class, MyTestConfig.class})
public class GaRuConfigTest {
@Autowired
private List<GaRu> rules
@Test
public void testSomething() {
// assertion on the rules
}
@TestConfiguration
static class MyTestConfig {
//... overwriting some beans you want to have changed for your test
}
}
這只會啟動具有該配置類的 ApplicationContext。
如果您想測驗您的配置是否與 Spring 基礎設施結合使用(在您的示例中并非如此),這將特別有用。通過該測驗,您可以驗證是否存在一個型別的 bean,List<GaRu>并且它可以自動裝配到其他類中。
僅啟動應用程式的一部分(與整個應用程式相比)更便宜,并且您仍然可以檢查這部分是否正確自動裝配,可能會通過特定@TestConfiguration覆寫您的生產配置的某些 bean。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/384515.html
上一篇:如何在Java中字串化投影屬性?
下一篇:更改資料庫時如何更新組合框專案?
