我有一个测试.net核心WebAPI的测试项目。 WebAPI项目中的margin: 10px auto 20px
引发错误
DependencyContext.Default
发生在
Value cannot be null.
Parameter name: assembly
可能是测试项目没有DI解析器没有入口点吗?
答案 0 :(得分:5)
DependencyContext.Default使用Assembly.GetEntryAssembly()来探测要加载的程序集。对于在Kestrel下运行的ASP.NET Core应用程序,它是一个控制台应用程序,因此有一个有效的条目程序集。
在单元测试环境中,创建并加载AppDomain以单独运行测试,创建的AppDomain没有条目程序集。为了设置条目程序集,由于您无权访问AppDomain创建代码,因此在构建Startup类之前必须使用一些反射:
// http://dejanstojanovic.net/aspnet/2015/january/set-entry-assembly-in-unit-testing-methods/
AppDomainManager manager = new AppDomainManager();
FieldInfo entryAssemblyfield = manager.GetType()
.GetField("m_entryAssembly", BindingFlags.Instance | BindingFlags.NonPublic);
entryAssemblyfield?.SetValue(manager, typeof(Startup).Assembly);
AppDomain domain = AppDomain.CurrentDomain;
FieldInfo domainManagerField = domain.GetType()
.GetField("_domainManager", BindingFlags.Instance | BindingFlags.NonPublic);
domainManagerField?.SetValue(domain, manager);
在您的单元测试代码创建或调用Startup类之前,只需将其放入。