[英]Could not load file or assembly Microsoft.AspNetCore.Mvc.ApiExplorer in my .NET Core unit test project
[英]Unable to setup AutoMapper in Unit Test, Could not load file or assembly Microsoft.AspNetCore.Mvc.ViewFeatures
我正在嘗試在我的.Net Core 2.1 Razor Pages項目中使用xUnit創建一個單元測試類,我似乎無法創建一個AutoMapper IMapper
對象來傳回我想要測試的方法。
以下是MainProject.csproj/AutoMapper/DomainProfile.cs
AutoMapper配置文件的簡化版本
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();
}
}
}
不確定它是否重要,但這是我的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);
}
最后,這是我一直在努力工作的我的精簡測試類, 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,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.App
在2.1。
我通常將AutoMapper注入Controller。 然后使用以下方法對控制器進行單元測試。
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);
}
}
嘗試顯式傳遞AutoMapper的類型:
services.AddAutoMapper(typeof(Startup), ///additional types where you can find profiles));
如果沒有該類型,擴展將掃描加載的程序集。 這似乎在單元測試中引起問題,因此要明確在哪里查找Profile
實例是安全的。
在我的情況下,我補充說
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.1" />
到xUnit項目文件和
重建解決方案和單元測試不再給我那個錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.