我正在尝试通过单元测试确认中间件是否已添加到管道中。我有以下静态方法用于添加中间件。这是我要测试的内容。
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
是空的,所以当前测试失败了。我猜测这是因为我只是模拟了 IApplicationBuilder
,但是关于单元测试 .Net Core 中间件的存在性的相关材料非常少。
非常感谢您的帮助!
IApplicationBuilder
或IServiceProvider
方法可以提供给你管道或确认特定类(甚至接口)是否在管道中。 - Phillip CopleyIApplicationBuilder.Use
是否被调用了,但由于 UseMiddleware 的工作方式,你将无法确定它是否是你类型的中间件。至少在实际调用请求委托之前是这样的。 - poke