簡體   English   中英

從 .net 核心集成測試項目加載引用的程序集不包括來自測試的 API 的引用項目

[英]Load referenced assemblies from a .net core Integration Test project doesn't include referenced projects from tested API

我創建了一個集成測試項目,其中引用了內置於.Net Core 3.1 的 Rest API 項目

在我的 Rest Api 啟動時,我做了一些反射來加載一些在我擁有的其他程序集上編碼的類(比如我動態加載的插件),但我通過反射做了一些發現。 我沒有指定程序集的路徑,我只是將它們作為參考添加到我的 Rest Api 項目並以這種方式加載它們

var assemblies = Assembly.GetEntryAssembly()?.GetReferencedAssemblies().Select(Assembly.Load);

現在,當我運行我的集成測試項目時,它不起作用。 我的集成測試項目參考了我的 Rest API 項目,我也使用了

IClassFixture

在執行測試之前運行我的 Rest Api 項目的啟動,但這種情況下的執行上下文(主線程)是測試項目。 從集成測試主線程執行我的 Rest Api 的啟動時,不會加載任何引用的程序集。

主要問題是我的測試項目沒有與我的 Rest Api 項目具有相同的引用,因此我將它們添加為集成測試項目的一部分。

它沒有用

此外,我嘗試創建在這些程序集上定義的虛擬對象,並在我的集成測試項目中使用它們。 如果您不創建虛擬 object,則編譯器不會看到您正在使用其中一個程序集的任何定義/類,並且不會將它們包含在 ReferenceAssemblies 列表中。 請參閱下面的想法

 private void CreateDummiesObject()
    {
        //To make the discovery process happen on assemblies that are referenced but not used until the runtime 
        //Core project
        TypeHelper th = null;
        //Data
        Repository<Summary> rep = null;
        //Data.Web.Api1
        WebApi1DbContext dbContext = null;
    }

它沒有用

知道如何解決這個問題嗎?

我把同樣的問題放在.Net core Github

感謝javiercn,答案很簡單,直接傳應用名

Assembly.Load(hostEnvironment.ApplicationName).GetReferencedAssemblies().Select(Assembly.Load)

它奏效了!!!

暫無
暫無

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

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