我正在制作一个控制台应用程序,我想使用WebApplicationFactory<>
为ASP.NET核心应用程序创建我习惯的集成/组件测试。
但是,我一直无法找到一种方法来以附加方式测试控制台应用程序,以确保我可以在调试测试期间在控制台应用程序中设置断点。
我试着用下面的答案来破解一些东西,但是我没有达到断点。当它试图连接的时候,进程已经终止了。
https://stackoverflow.com/a/72075450
有没有更好的方法让我忽略?
我当前代码的简化版本:
internal class Program
{
static async Task Main(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
.UseConsoleLifetime()
.ConfigureServices((_, services) => services.AddHostedService<CustomHostedService>())
.Build();
await host.RunAsync();
}
}
internal class CustomHostedService : IHostedService
{
private readonly IHostApplicationLifetime _hostApplicationLifetime;
public CustomHostedService(IHostApplicationLifetime hostApplicationLifetime)
{
_hostApplicationLifetime = hostApplicationLifetime;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
// Actual code for the application
_hostApplicationLifetime.StopApplication();
}
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
internal class IntegrationTests
{
[Fact]
public void Executable()
{
Process.Start("{assemblyName}.exe {arguments}")
// Asserts
}
[Fact]
public void DotnetRun()
{
Process.Start("dotnet", "run --project {project_path} {arguments}");
// Asserts
}
}
2条答案
按热度按时间wvyml7n51#
如果它是一个控制台应用程序,请使用AutoHotKey或SikuliX for wimforms或其他系统作为测试框架运行它。
Selenium在测试网站方面很流行,但是console和winform完全不同,它们不是为
WebApplicationFactory<>
模式设计的。你也许能够做到这一点,虽然有一个原因,你无法找到其他人的例子走上这条不匹配的技术道路,因为它是非正统的和不受支持的。
我会尝试AHK和SikuliX,两者都是免费的,并考虑附加调试器的进程-这通常是有用的故障排除系统的问题,无法重现。当你只是运行一个控制台应用程序与一堆逻辑代码路径,你可以很容易地通过阅读StdOut的各种序列的输入验证。
jum4pzuy2#
我建议你不要把事情复杂化,你需要在处理多个项目时添加附件,因为这是一个项目,你可以按照下面提到的常规测试用例的东西。https://learn.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/unit-testing/creating-unit-tests-for-asp-net-mvc-applications-cs
测试方法的常规调试会将您带到要调试的方法。