2015-09-01 98 views
1

我想測試我的Spring Boot應用程序的情況下,當沒有配置文件給出。在這種情況下,應用程序在創建bean MyConfig時應該引發異常。測試彈簧的情況下,甚至不應該加載的情況下

@SpringBootApplication 
public class MyApplication { 
    public static void main(String[] args) { 
     SpringApplication.run(MyApplication.class, args); 
    } 

    @Bean 
    public MyConfig myConfig() throws IOException { 
     if (no config file) throw new NoConfigFileException(); 
    } 
} 

我有一個測試,如果Spring應用程序的上下文是建立在此進行測試:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = MyApplication.class) 
@TestPropertySource(locations="classpath:file_with_existing_config_file_path.properties") 
public class MyApplicationTest { 

    @Test 
    public void contextLoads() { 
    } 

} 

測試失敗 - 如預期(因爲myConfig方法拋出NoConfigFileException)。不幸的是,我不能使用註釋@Test(expected = NoConfigFileException.class)「將燈變成綠色」。

如果不是我唯一的一種測試方法,我應該在哪裏預期異常?

回答

1

當您編寫自動化測試時,黃金法則是 - >每個測試方法都包含一個測試用例(除非您正在進行參數化測試)。在我看來,你正在考慮打破這一規則。

考慮單獨測試類(不指定屬性文件),它只測試這個方面或你的邏輯。這樣你可以使用@Test(expected = NoConfigFileException.class)

順便說一句,我會建議看看春季啓動功能@ConfigurationProperties。您可以將Java EE驗證(例如@NotNull)用於您的屬性。

這樣,如果沒有配置文件加載到Spring上下文中,那麼您可以強制應用程序找到該文件並提前失敗。

+0

謝謝,我一定已經忘記了這條規則:)現在它更容易了。 –