【发布时间】:2019-03-29 13:43:14
【问题描述】:
在从ConfigureServices 调用的扩展方法中,我将EmbeddedFileProvider 的实例添加到RazorViewEngineOptions。我想测试它是否被添加,但我找不到如何获取 RazorViewEngineOptions 实例。
这在应用程序运行时有效:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddMyServices(Configuration);
}
public static IServiceCollection AddMyServices(this IServiceCollection services, IConfiguration configuration)
{
services.Configure<RazorViewEngineOptions>(options =>
{
options.FileProviders.Add(new EmbeddedFileProvider(typeof(MyClass).Assembly, "My.Namespace"));
});
return services;
}
但是我该如何测试呢?此处抛出NullReferenceException:
[Fact]
public void MyTest()
{
var services = new ServiceCollection();
var serviceProvider = services.BuildServiceProvider();
MyServicesBuilder.AddMyServices(services, new Mock<IConfiguration>().Object);
var razorOptions = serviceProvider.GetService<IOptions<RazorViewEngineOptions>>();
Assert.Equal(1, razorOptions.Value.FileProviders.Where(x => x.GetType() == typeof(EmbeddedFileProvider)).Count());
}
我已尝试添加services.AddMvc() 或services.AddSingleton<RazorViewEngineOptions>()。
我也尝试过调用services.GetRequiredService<RazorViewEngineOptions>(),但会抛出System.InvalidOperationException : No service for type 'Microsoft.Extensions.Options.IOptions'1[Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions
我也尝试过询问RazorViewEngineOptions 而不是IOptions<RazorViewEngineOptions>。
【问题讨论】:
-
在构建提供者后添加到服务集合中的任何内容都不会为提供者所知。
标签: c# unit-testing asp.net-core .net-core