public async Task PublishAsync_Mediatorが実行される() { var services = new ServiceCollection(); services.AddMediatR(typeof(ServicePing).Assembly); services.AddSingleton<TaskHolder>(); var provider = services.BuildServiceProvider(); var serviceFactory = provider.GetService<ServiceFactory>(); var registry = new ListenerRegistry(); registry.Add(typeof(MediatorClientTestPang)); var client = new DefaultMediatorClient(new ServiceRegistry(), registry, serviceFactory!, new InternalScopedServiceFactoryFactory(serviceFactory!), new TestLogger()); var holder = provider.GetService<TaskHolder>(); var pang = new MediatorClientTestPang(); await client.PublishAsync(nameof(MediatorClientTestPang), pang); Thread.Sleep(1000); //それぞれで10だけまたしているため、1000あれば終わっているはず。 await Task.WhenAll(holder.Tasks); holder.Messages.Should().HaveCount(3).And.Contain("1", "2", "3"); holder.Pangs.Should().HaveCount(3); var paramBang = holder.Pangs[0]; foreach (var bangItem in holder.Pangs) { paramBang.Should().Be(bangItem); } }
public Task Handle(MediatorClientTestPang notification, CancellationToken cancellationToken) { holder.Pangs.Add(notification); task.Start(); return Task.CompletedTask; }