gpt4 book ai didi

c# - 确认中间件正在使用中

转载 作者:太空狗 更新时间:2023-10-30 00:48:05 26 4
gpt4 key购买 nike

我正在尝试通过单元测试确认中间件确实已添加到管道中。我有以下添加中间件的静态方法。这就是我正在测试的内容。

public static class HandleDbUpdateExceptionExtensions
{
public static IApplicationBuilder UseDbUpdateExceptionHandler(this IApplicationBuilder builder)
{
return builder.UseMiddleware<DbUpdateExceptionHandler>();
}
}

我知道它确实有效,因为中间件在我的网站上运行。但是,我想编写一个单元测试以确保它始终包含在未来的构建中。然而,我的单元测试失败了:

[Fact(DisplayName = "Exception handler is added to IApplicationBuilder")]
public void DbUpdateExceptionHandler_Added_To_IApplicationBuilder()
{
var builder = new Mock<IApplicationBuilder>().Object;

builder.UseDbUpdateExceptionHandler();

Assert.NotNull(builder.ApplicationServices);

//var test = builder.ApplicationServices.GetService(typeof(DbUpdateExceptionHandler));
}

builder.ApplicationServices 为空,因此测试当前失败。我认为它失败了,因为我只是在 mock IApplicationBuilder,但是关于单元测试 .Net Core 中间件存在的在线相关 Material 很少。

非常感谢任何帮助!

最佳答案

UseMiddleware 实际上是一个扩展方法,它将创建一个在内部使用您的中间件的 RequestDelegate。该委托(delegate)会做很多事情,因此您很难测试它是否会正确注册您的实际中间件类型。

你唯一真正能做的就是检查底层 ApplicationBuilder.Use method一些请求委托(delegate)调用。

或者,您也可以通过构建应用程序管道并执行它来实际调用中间件。但这需要您正确设置依赖注入(inject)(因为来自 UseMiddleware() 的委托(delegate)将使用它)并且正确设置所有中间件的依赖项。

所以这会非常复杂。我建议你写一个 integration test取而代之的是检查请求,你的中间件将被正确调用并且可以做它应该做的事情。

关于c# - 确认中间件正在使用中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50116882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com