using System; using System.Linq; using System.Reflection; using DotNetCore.CAP.Abstractions; using DotNetCore.CAP.Internal; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Xunit; namespace DotNetCore.CAP.Test { public class ConsumerInvokerFactoryTest { private IConsumerInvokerFactory consumerInvokerFactory; public ConsumerInvokerFactoryTest() { var services = new ServiceCollection(); services.AddLogging(); services.AddSingleton(); var provider = services.BuildServiceProvider(); var logFactory = provider.GetRequiredService(); var binder = new ModelBinderFactory(); consumerInvokerFactory = new ConsumerInvokerFactory(logFactory, binder, provider); } [Fact] public void CreateInvokerTest() { var methodInfo = typeof(Sample).GetRuntimeMethods() .Single(x => x.Name == nameof(Sample.ThrowException)); var description = new ConsumerExecutorDescriptor { MethodInfo = methodInfo, ImplTypeInfo = typeof(Sample).GetTypeInfo() }; var messageContext = new MessageContext(); var context = new ConsumerContext(description, messageContext); var invoker = consumerInvokerFactory.CreateInvoker(context); Assert.NotNull(invoker); } [Theory] [InlineData(nameof(Sample.ThrowException))] [InlineData(nameof(Sample.AsyncMethod))] public void InvokeMethodTest(string methodName) { var methodInfo = typeof(Sample).GetRuntimeMethods() .Single(x => x.Name == methodName); var description = new ConsumerExecutorDescriptor { MethodInfo = methodInfo, ImplTypeInfo = typeof(Sample).GetTypeInfo() }; var messageContext = new MessageContext(); var context = new ConsumerContext(description, messageContext); var invoker = consumerInvokerFactory.CreateInvoker(context); Assert.Throws(() => { invoker.InvokeAsync().GetAwaiter().GetResult(); }); } } }