[英]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.