Custom Middleware Testing: xUnit ile ASP.NET Core Pipeline Testi

Middleware, HTTP isteğini işleyen ve yanıtı döndüren bileşendir. Örneğin authentication, logging, error handling gibi işlemler middleware'de yapılır. Doğru çalışıp çalışmadığını test etmek çok önemlidir çünkü yanlış middleware tüm uygulamayı etkileyebilir.

Önce xUnit ve Moq paketlerini yükleyin:

1dotnet add package xunit
2dotnet add package xunit.runner.visualstudio
3dotnet add package Moq

Basit bir logging middleware oluşturalım:

1public class LoggingMiddleware
2{
3private readonly RequestDelegate _next;
4
5public LoggingMiddleware(RequestDelegate next)
6{
7_next = next;
8}
9
10public async Task InvokeAsync(HttpContext context)
11{
12context.Response.Headers.Add("X-Custom-Header", "TestValue");
13await _next(context);
14}
15}

xUnit ile test sınıfı oluşturun:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1public class LoggingMiddlewareTests
2{
3[Fact]
4public async Task Middleware_ShouldAddCustomHeader()
5{
6// Arrange
7var context = new DefaultHttpContext();
8var middleware = new LoggingMiddleware(async (ctx) =>
9{
10await ctx.Response.WriteAsync("OK");
11});
12
13// Act
14await middleware.InvokeAsync(context);
15
16// Assert
17Assert.True(context.Response.Headers.ContainsKey("X-Custom-Header"));
18Assert.Equal("TestValue", context.Response.Headers["X-Custom-Header"].ToString());
19}
20}

Tüm pipeline'ı test etmek için WebApplicationFactory kullanın:

1public class PipelineTests: IClassFixture<WebApplicationFactory<Program>>
2{
3private readonly WebApplicationFactory<Program> _factory;
4
5public PipelineTests(WebApplicationFactory<Program> factory)
6{
7_factory = factory;
8}
9
10[Fact]
11public async Task Pipeline_ShouldReturnCustomHeader()
12{
13var client = _factory.CreateClient();
14var response = await client.GetAsync("/");
15
16Assert.True(response.Headers.Contains("X-Custom-Header"));
17}
18}
1dotnet test

Beklenen çıktı:

1Test Run Successful.
2Total tests: 2
3Passed: 2
4Failed: 0

Middleware test etmek üç adımda yapılır: DefaultHttpContext oluştur, middleware'i çağır, sonucu kontrol et. WebApplicationFactory ile gerçek pipeline'da test edebilirsiniz.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz