我正在努力創建一個測試來驗證加載屬性文件的ServletListener
。我測試過運行的應用程序,它工作正常,它發現classpath
中的文件。但我不知道如何爲它創建一個測試。我的想法是創建一個帶有測試屬性的臨時文件,然後驗證該屬性是否放入System properties
。但是我總是無法在正確的位置創建文件。getResourceAsStream(「文件」)在測試中運行時進行搜索?
我試過在/target/test-classes
或直接在應用程序的根目錄下創建文件,但它從來沒有找到它。任何想法?
這是我想測試代碼:
public class PropertyReadingListener implements ServletContextListener {
public static final String PROFILES_PROPERTIES = "profiles.properties";
@Override
public void contextDestroyed(ServletContextEvent event) {
}
@Override
public void contextInitialized(ServletContextEvent event) {
Properties propsFromFile = new Properties();
try {
propsFromFile.load(getClass().getResourceAsStream(PROFILES_PROPERTIES));
} catch (final Exception e) {
log.warn("Unable to find {}, using default profile", PROFILES_PROPERTIES);
}
propsFromFile.stringPropertyNames().stream()
.filter(prop -> System.getProperty(prop) == null)
.forEach(prop -> System.setProperty(prop, propsFromFile.getProperty(prop)));
}
}
感謝。
好的單元測試可以通過嘲笑合作類的行爲來消除外部依賴(如文件)。這是一個很好的做法,因爲它允許您編寫一個可以輕鬆運行的測試(即,您不必擔心部署文件或將應用程序打包到JAR中)。 – EJK
你正在用maven構建yor項目嗎?然後你可以把一個測試屬性文件放到src/test/resources中。這隻適用於測試類。你會加載它與getResourceAsStream(「/」+文件名) –