c# - 无法在单元测试中设置 AutoMapper,无法加载文件或程序集 Microsoft.AspNetCore.Mvc.ViewFeatures
问题描述
我正在尝试在我的 .Net Core 2.1 Razor Pages 项目中使用 xUnit 创建一个单元测试类,我似乎无法创建一个 AutoMapperIMapper
对象以传回我想要测试的方法。
这是我的 AutoMapper 配置文件的简化版本MainProject.csproj/AutoMapper/DomainProfile.cs
using AutoMapper;
using MainProject.Models;
using MainProject.Models.ViewModels;
namespace MainProject.AutoMapper
{
// Ref: https://dotnetcoretutorials.com/2017/09/23/using-automapper-asp-net-core/
// AutoMapper (called from Startup.cs) will search for any class that inherits from Profile
public class DomainProfile : Profile
{
public DomainProfile()
{
CreateMap<MyModel, MyViewModel>()
.ForMember(vm => vm.Property1, map => map.MapFrom(m => m.Property1))
.ForMember(vm => vm.Property2, map => map.MapFrom(m => m.Property2))
.ReverseMap();
}
}
}
不确定它是否重要,但这是我设置 AutoMapper 依赖注入MainProject.csproj/Startup.cs
的方法:ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options => { ... });
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();
// AutoMapper
services.AddAutoMapper();
services.AddMvc()
.AddRazorPagesOptions(options => { ... })
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
最后,这是我一直试图开始工作的精简测试课程MainProject.Test.csproj/Services/MyModelServicesTest.cs
:
using System.Threading.Tasks;
using AutoMapper;
using Outreach.AutoMapper;
using Xunit;
...
...
namespace MainProject.Test.Services
{
public class MyModelServicesTest
{
[Fact]
public async Task MyUnitTestMethod()
{
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile(new DomainProfile());
});
var mapper = config.CreateMapper();
// myModelServices.SomeMethod(mapper);
// ... Other code that is never reached before the error throws
}
}
}
当代码命中时cfg.AddProfile(new DomainProfile());
,它会引发此错误:
System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.AspNetCore.Mvc.ViewFeatures,版本=2.1.1.0,文化=中性,PublicKeyToken=adb9793829ddae60”。该系统找不到指定的文件。
有什么建议么?
解决方案
尝试为 AutoMapper 显式传递类型:
services.AddAutoMapper(typeof(Startup), ///additional types where you can find profiles));
如果没有类型,扩展将扫描加载的程序集。这似乎会导致单元测试出现问题,因此为了安全起见,请明确在哪里查找Profile
实例。
推荐阅读
- node.js - 发生未处理的异常:给定 ng serve 时找不到模块“@angular/compiler-cli/ngcc”
- javascript - 如何在 js 中重新启动一个 foreach 循环;
- ios - 'keyWindow' 已弃用:在 iOS 13.0 中的 Objective-C 中首次弃用
- archlinux - Manjaro 更新错误:更新核心失败(无法锁定数据库)
- sql - 使用表作为队列在 SQL Server 2017 中查找以前的条件值
- javascript - amp 应用程序横幅未在 android 和 IOS 设备中正常显示
- c# - Entity Framework Core - 使用依赖注入而不是“上下文”从链接表中检索影子属性
- c++ - Redis:我可以在 Redis 中存储包含指向数组的指针的 ac/c++ 结构类型吗?
- javascript - 如何在同一个 ts 文件中使用所有 import、modules.export 和 export?
- php - 当我包含使用“distinct”时出现语法错误