9

我正在使用 .NET Core 2.2 IHostBuilder(通用主机生成器)构建一个控制台应用程序,将消息流应用程序作为 BackgroundService(IHostedService)运行。 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.2

这不是通常用于托管 ASP.NET Core Web 应用程序的 IWebHostBuilder。

我想构建一些基本的集成测试来验证正常关闭和 IoC 配置。我想启动一个托管我的 IHostBuilder 主机的 TestServer。我不需要提供任何类型的请求。

我已经在 Microsoft.AspNetCore.TestHost 中使用 IWebHostBuilder 和 TestServer 完成了这种事情。但是,不支持 IHostBuilder,只有 IWebHostBuilder。 https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.testhost.testserver.-ctor?view=aspnetcore-2.2#Microsoft_AspNetCore_TestHost_TestServer__ctor_Microsoft_AspNetCore_Hosting_IWebHostBuilder_

我知道 IHostBuilder 将替换 .NET Core 3.0 中的 IWebHostBuilder 并且那里的 TestServer 将支持这一点。试图在 .NET Core 2.2 中找到一种方法。

4

1 回答 1

0

我意识到这可能不是您的想法,但是您可以使用脚本对其进行测试。

它检查应用程序在启动时不会崩溃,并且可以使用SIGTERM.

test-start-stop.sh

#!/usr/bin/bash

# Exit on error
# https://stackoverflow.com/questions/19622198/what-does-set-e-mean-in-a-bash-script
set -e

# Publish binary
# https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
dotnet publish -r linux-x64 -o publish app

# Run in background and save process ID
# https://stackoverflow.com/questions/1908610/how-to-get-pid-of-background-process
./app/publish/app & 
APP_PID=$!

# Wait until app is started
sleep 5s

# Send SIGTERM
kill -SIGTERM $APP_PID

# Wait for process exit
wait $APP_PID
于 2019-09-02T10:57:36.020 回答