【发布时间】:2019-11-14 14:35:01
【问题描述】:
我有一个 Blazor (ASP.NET Core 3.0) 应用程序(默认模板),我想使用 Selenium 编写一些集成测试。为此,我需要在测试运行之前启动 Web 应用程序。
我通过运行来做到这一点
CreateHostBuilderWithStartup<Startup>(new string[0]).UseContentRoot(contentRoot).Build().RunAsync();
private static IHostBuilder CreateHostBuilderWithStartup<TStartup>(string[] args) where TStartup : class
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<TStartup>();
});
}
其中contentRoot 是被测项目的路径。这工作正常,服务器按预期运行。
我的解决方案包含 2 个项目 - 应用程序代码和测试代码。
但是,如果我尝试使用继承自启动的测试项目中的 Startup 类(即CreateHostBuilderWithStartup<TestStartup>),则服务器会为每个请求返回 500 内部服务器错误。服务器的控制台输出中的错误是:
Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware: Error: An unhandled exception has occurred while executing the request.
System.InvalidOperationException: Cannot find the fallback endpoint specified by route values: { page: /_Host, area: }.
at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.DynamicPageEndpointMatcherPolicy.ApplyAsync(HttpContext httpContext, CandidateSet candidates)
at Microsoft.AspNetCore.Routing.Matching.DfaMatcher.SelectEndpointWithPoliciesAsync(HttpContext httpContext, IEndpointSelectorPolicy[] policies, CandidateSet candidateSet)
at Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.<Invoke>g__AwaitMatch|6_1(EndpointRoutingMiddleware middleware, HttpContext httpContext, Task matchTask)
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)
'dotnet.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\3.0.0-preview6.19307.2\Microsoft.AspNetCore.Http.Extensions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
如果我将 TestStartup 移到主代码项目中,这可以正常工作,但理想情况下,我希望将测试代码保留在测试项目中。我需要使用这个 TestStartup 类,以便我可以重写 ConfigureServices 方法来更改注入的依赖项。
所以这个问题的核心是,我可以在我正在运行的 ASP.NET Core 项目的根目录之外拥有 Startup 类吗?
对此的任何帮助将不胜感激!
【问题讨论】:
-
可能您需要使用ApplicationParts?并不是说我已经这样做了。
标签: c# asp.net .net-core blazor