ASP.NET Core提供了WebApplicationFactory<T>
,可用于启动一个测试主机以进行集成测试。
非ASP.NET Core项目是否也有类似的功能呢?例如,像“.NET Core Worker Service模板”这样的项目没有任何对ASP.NET Core的引用,但它使用了泛型主机。
举个例子,我有一个像这样作为Windows服务托管的项目。我想像针对ASP.NET Core项目一样轻松地创建集成测试(在那里我可以重复使用Startup文件中的DI,因此不需要在测试中设置它)。
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, builder) =>
{
builder.AddAppSettings(context.HostingEnvironment.EnvironmentName);
})
.ConfigureServices((hostContext, services) =>
{
// Loads of configuration (DI, Logging, Messaging, etc) removed for brevity
// ...
})
.UseWindowsService();
}
在这种情况下,该服务使用 Masstransit 监听消息,因此不需要设置 HostedService。但在其他情况下可能也需要设置。