Rya*_*ite 5 c# unit-testing automapper asp.net-core
我正在尝试在 .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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
不确定这是否重要,但这是我的MainProject.csproj/Startup.cs方法ConfigureServices,其中 AutoMapper 的依赖注入的设置:
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);
}
Run Code Online (Sandbox Code Playgroud)
最后,这是我一直试图开始工作的精简测试类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
}
}
}
Run Code Online (Sandbox Code Playgroud)
当代码命中时,cfg.AddProfile(new DomainProfile());它会抛出此错误:
System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.AspNetCore.Mvc.ViewFeatures,Version=2.1.1.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”。该系统找不到指定的文件。
有什么建议么?
System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.AspNetCore.Mvc.ViewFeatures,Version=2.1.1.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”。该系统找不到指定的文件。
根据错误信息,可能是AspNetCore缺少依赖项。例如,Microsoft.AspNetCore.All在 2.0 或Microsoft.AspNetCore.App2.1 中。
我通常将 AutoMapper 注入到控制器中。然后使用以下方法对控制器进行单元测试。
public class MyModelServicesTest
{
private readonly Mapper _mapper;
public MyModelServicesTest()
{
_mapper = new Mapper(new MapperConfiguration(cfg =>
cfg.AddProfile(new MappingProfile())));
}
[Fact]
public async Task MyUnitTestMethod()
{
var sut = new SomeController(_mapper, _mockSomeRepository.Object);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3434 次 |
| 最近记录: |