[英]How to test the CORS policy in .net core web API, if I dont have access to front end?
[英]How can I end to end test this .net core console application?
我有一個 .Net Core 2.0 控制台應用程序。 main() 方法是這樣的:
public static async Task Main()
{
// create host builder
var hostBuilder = new HostBuilder();
var myApp = new MyApplication();
// Build host
var host = hostBuilder
.ConfigureHostConfiguration(myApp.ConfigureHostConfiguration)
.ConfigureServices(myApp.ConfigureServices)
.ConfigureLogging(myApp.ConfigureLogging)
.Build();
// Initialise
await myApp.InitialiseAppAsync(host);
// Run host
await host.RunAsync(CancellationToken.None);
}
MyApplication 類在 ConfigureHostConfiguration() 中設置應用程序配置,然后在 ConfigureServices() 中配置依賴項,其中一些注冊消息處理程序以處理來自 Azure 服務總線的特定消息類型。 應用程序需要在 InitialiseAppAsync() 中進行一些初始化。 調用 host.RunAsync() 時,控制台應用程序將無限期運行,並且一旦 Azure 服務總線上的消息可用,消息處理程序就會接收執行。 這一切都很棒,而且工作正常。
我想做的是在包含一些端到端測試(使用 XUnit)的相同解決方案下創建一個新項目。 我希望能夠覆蓋一些依賴項(使用測試模擬,使用 NSubstitute),保留其他依賴項,因為它們在服務中配置。
我猜我需要在我的測試中創建我自己的 HostBuilder,所以我需要能夠在測試中調用 host.RunAsync() 之前設置模擬。
有誰知道我怎么能做到這一點? 或者這樣做的最佳做法是什么?
最終,我想要做的是能夠用模擬覆蓋我的控制台應用程序中我的一些(但不是全部)真正的依賴項,所以我可以做一些端到端的測試。
提前致謝
有多種方法可以實現這一點。 您可以在啟動應用程序時設置環境變量“environment”。 然后你需要運行你的應用程序,像這樣傳遞它:
dotnet "MyApplication.dll" --environment end2endTests
然后,您將能夠在可IHostEnvironment
實例中找到作為環境傳遞的值。 這是您的 DI 注冊的樣子:
services.AddScoped<IFoo>(provider =>
{
var env = provider.GetRequiredService<IHostEnvironment>();
if (env.EnvironmentName == "end2endTests")
{
return new TestFoo();
}
return new RealFoo();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.