繁体   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