簡體   English   中英

從SpringBoot WebMvcTest或其他應用程序上下文中掃描WebMvcTest排除PropertySource

[英]Excluding PropertySource from scanning in SpringBoot WebMvcTest or other application context for WebMvcTest

我使用Spring Boot開發Web應用程序。 Web層的單元測試有問題。 對於這些測試,我使用注釋@WebMvcTest 問題是我的主要配置類包含帶有Java arg的@PropertySource ,其中包含外部屬性文件的路徑,並且當我啟動單元Web測試時,發生了無法解析此Java arg的錯誤(當然,我可以添加此java arg來運行我的測試的配置,但是我的Web單元測試不需要此文件)。

我的主要配置類:

@SpringBootApplication
@PropertySource(value = {"${pathto.configfile}"})
@EnableAspectJAutoProxy
public class Application {

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

}

我的第一個解決方案是使用"!test"配置文件創建單獨的配置類,然后將@PropertySource("..")到該配置類。 並在我的單元測試中添加@ActiveProfiles("test")

我的第二個配置類:

@Configuration
@Profile({"!test"})
@PropertySource(value = {"${pathto.configfile}"})
public class PropertyConfiguration {

}

對於單元Web測試,此解決方案非常有效。 但是新的問題出現在我的Web應用程序的啟動中。 在我的外部屬性文件中,我具有屬性spring.profiles.active 我為此屬性分配dbfile值。 根據其值,將創建適當的存儲庫實現並將其注入我的服務層。 當value為db ,應用程序啟動良好,但是當value為file時將引發錯誤: NoSuchBeanDefinitionException

當我回到以前的版本(沒有第二個配置文件)時,兩種情況下的應用程序都可以很好地啟動(但不能進行Web單元測試)

因此,請解釋一下,為什么當spring.profiles.active=db值啟動時應用程序正常,但是當spring.profiles.active=file失敗時-為什么我該如何解決我的任務? 我試圖找到如何將其他應用程序上下文添加到Web單元測試中,但沒有找到。 任何想法?:)

對於我的數據庫存儲庫,我使用的是Spring Data JPA,因此,我沒有創建這些存儲庫的實現,但是創建了我的文件存儲庫的實現,並且我的實現具有@Profile("file") 從實現中刪除此注釋后,它僅保留在接口上。 我不知道為什么一個配置類起作用,但是兩個類卻沒有。 但是問題解決了)

暫無
暫無

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

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