using Sharp.NetServer.Middleware; namespace NetServer.Test.UnitTests; /// /// 中间件管道测试(简化版) /// [TestClass] public class MiddlewarePipelineTests { [TestMethod] public async Task Pipeline_ShouldExecuteMiddlewaresInOrder() { // Arrange var pipeline = new MiddlewarePipeline(); var executionOrder = new List(); pipeline.Use(next => async context => { executionOrder.Add("First-Before"); await next(context); executionOrder.Add("First-After"); }); pipeline.Use(next => async context => { executionOrder.Add("Second-Before"); await next(context); executionOrder.Add("Second-After"); }); pipeline.Use(next => async context => { executionOrder.Add("Third"); }); // Act await pipeline.ExecuteAsync(null!); // 简化测试,不需要真实 context // Assert Assert.AreEqual(5, executionOrder.Count); Assert.AreEqual("First-Before", executionOrder[0]); Assert.AreEqual("Second-Before", executionOrder[1]); Assert.AreEqual("Third", executionOrder[2]); Assert.AreEqual("Second-After", executionOrder[3]); Assert.AreEqual("First-After", executionOrder[4]); } [TestMethod] public async Task Pipeline_ShouldSupportMultipleMiddlewares() { // Arrange var pipeline = new MiddlewarePipeline(); var counter = 0; for (var i = 0; i < 5; i++) pipeline.Use(next => async context => { counter++; await next(context); }); // Act await pipeline.ExecuteAsync(null!); // Assert Assert.AreEqual(5, counter); } [TestMethod] public async Task Pipeline_CanShortCircuit() { // Arrange var pipeline = new MiddlewarePipeline(); var reachedEnd = false; pipeline.Use(next => async context => { // 短路,不调用 next await Task.CompletedTask; }); pipeline.Use(next => async context => { reachedEnd = true; await next(context); }); // Act await pipeline.ExecuteAsync(null!); // Assert Assert.IsFalse(reachedEnd, "Pipeline should be short-circuited"); } }