以前,我可以像这样从相邻的 NUnit 项目启动 .Net Core 3.1 Asp.Net Core Web 应用程序
[OneTimeSetUp]
public void Setup()
{
Program.BuildWebHost(new string[] {}).Start();
}
Web 应用程序中的 Program.cs 看起来像这样
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(new ConfigurationBuilder()
.AddCommandLine(args)
.Build())
.UseStartup<Startup>()
.Build();
}
但在一些更新后它停止工作。我为 NUnit 找到的只是使用建议WebApplicationFactory
private WebApplicationFactory<Startup> _factory;
private HttpClient _client;
[OneTimeSetUp]
public void GivenARequestToTheController()
{
_factory = new WebApplicationFactory<Startup>();
_client = _factory.CreateClient();
}
有用。但是,如果我不想使用这个 HttpClient,但我想使用 Selenium,例如,它就不起作用。从另一个项目启动一个项目似乎是一项平庸的任务,但由于某种原因,存在一些困难。当然,我可以手动找到程序集并启动进程,但这并不严重。
附加组件
“停止工作”是指端口 5000 和 5001 没有在监听,因为它应该通过配置进行监听。也没有其他端口在监听,我扫描了整个 localhost。
在 Debug 模式下运行测试时,我在 Startup.cs 中放置了一个断点,并且没有错误地运行到最后。
找到了问题的根源
感谢@Andrei Khotko 的例子 ,我们设法通过打字找到了问题的根源。将以下代码添加到Startup.cs后开始播放
public IConfiguration Configuration { get; private set; }
public void ConfigureServices(IServiceCollection services)
{
...
Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"appsettings.json")
.Build();
services.AddSingleton<IConfiguration>(Configuration);
}
但是为什么会发生这种情况,我还是不明白。一开始我以为是由于测试项目中缺少appsetins.json文件。复制在那里,没有帮助。我检查了调试器,它Directory.GetCurrentDirectory()返回了在构建过程中复制该文件的文件夹的路径。
那么可能是什么问题?
使用 WebApi 模板 (.Net Core 3.1) 创建了一个 ASP.NET Core Web 应用程序。创建了 HelloDataManager:
创建了一个控制器:
程序.cs
我为 .Net Core 3.1 测试创建了一个程序集,这是一个类库,我在其中添加了一个类:
测试通过:
为了解决问题中描述的问题(实际上,仅在最后一次编辑后才显示),有必要确保保留原始配置。为此,请使用方法
.AddConfiguration()PS 没错,这对我也没有帮助,但这已经是下一个问题的主题,我无法从 NUnit 测试 blazor blazor-client-side获取 index.html