c# - 确认中间件正在使用中
问题描述
我正在尝试通过单元测试确认中间件实际上已添加到管道中。我有以下添加中间件的静态方法。这就是我正在测试的。
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
为空,因此测试当前失败。我认为它失败了,因为我只是在嘲笑,但网上关于单元测试.Net Core 中间件存在IApplicationBuilder
的相关材料很少。
任何帮助是极大的赞赏!
解决方案
UseMiddleware
实际上是一个扩展方法,它将创建一个在内部使用您的中间件的 RequestDelegate。该委托做了很多事情,因此您很难测试它是否会正确注册您的实际中间件类型。
你唯一能做的就是检查底层ApplicationBuilder.Use
方法是否被一些请求委托调用。
或者,您也可以通过构建应用程序管道并执行它来实际调用中间件。但这将要求您正确设置依赖注入(因为委托UseMiddleware()
将使用它)并且您的所有中间件的依赖项都已正确设置。
所以这将是非常复杂的。我建议您编写一个集成测试,而不是检查请求,您的中间件将被正确调用并且可以执行它应该执行的操作。
推荐阅读
- asp.net - 如何使用 Visual Basic 中的 excel 数据阅读器获取特定单元格的内容?使用 Excel 数据阅读器
- c - 在 C 中将 double 转换为 char*
- lambda - 使用 lambda 函数数值求解方程
- reactjs - React - 关闭严格模式,仅在第一次状态更改后第二次构造功能组件
- php - 显示来自 2 个表 laravel 6 的数据
- tomcat - 在没有 web.xml 的情况下覆盖 Tomcat 的默认错误页面
- python - Pytorch LSTM-VAE Sentence Generator:RuntimeError:梯度计算所需的变量之一已被就地操作修改
- c# - 如何在我的 Xamarin 应用程序中使用 NavigationPageRenderer 来自定义顶部导航栏?
- pandas - 塞恩斯伯里的美味汤一无所获
- javascript - 将额外的属性从 CKFinder 发送到 CKEditor 5