using System; using System.Collections.Generic; using System.Text; using System.Reflection; using DotNetCore.CAP.Internal; using Xunit; namespace DotNetCore.CAP.Test { public class ObjectMethodExecutorTest { [Fact] public void CanCreateInstance() { var testClass = new MethodExecutorClass(); var methodInfo = testClass.GetType().GetMethod("Foo"); var executor = ObjectMethodExecutor.Create(methodInfo, typeof(MethodExecutorClass).GetTypeInfo()); Assert.NotNull(executor); } [Fact] public void CanExcuteMethodWithNoParameters() { var testClass = new MethodExecutorClass(); var methodInfo = testClass.GetType().GetMethod("GetThree"); var executor = ObjectMethodExecutor.Create(methodInfo, typeof(MethodExecutorClass).GetTypeInfo()); Assert.NotNull(executor); var objResult = executor.Execute(testClass, null); Assert.Equal(3, objResult); } [Fact] public void CanExcuteMethodWithParameters() { var testClass = new MethodExecutorClass(); var methodInfo = testClass.GetType().GetMethod("Add"); var executor = ObjectMethodExecutor.Create(methodInfo, typeof(MethodExecutorClass).GetTypeInfo()); Assert.NotNull(executor); var objResult = executor.Execute(testClass, 1, 2); Assert.Equal(3, objResult); } [Fact] public void CanGetExcuteMethodDefaultValue() { var testClass = new MethodExecutorClass(); var methodInfo = testClass.GetType().GetMethod("WithDefaultValue"); var executor = ObjectMethodExecutor.Create(methodInfo, typeof(MethodExecutorClass).GetTypeInfo()); var objResult = executor.GetDefaultValueForParameter(0); Assert.Equal("aaa", objResult); var objResult2 = executor.GetDefaultValueForParameter(1); Assert.Equal("bbb", objResult2); } } public class MethodExecutorClass { public void Foo() { } public int GetThree() { return 3; } public int Add(int a, int b) { return a + b; } public void WithDefaultValue(string aaa = "aaa", string bbb = "bbb") { } } }