using Util.Helpers; using Util.Tests.Samples; using Xunit; namespace Util.Tests.Helpers; /// /// 测试反射操作 /// public class ReflectionTest { /// /// 测试查找实现类型列表 - 测试类型中只有一个类实现IA接口 /// [Fact] public void TestFindImplementTypes_1() { var types = Reflection.FindImplementTypes( this.GetType().Assembly ); Assert.Single( types ); Assert.Equal( typeof( A ), types[0] ); } /// /// 测试查找实现类型列表 - 抽象类和接口被排除 /// [Fact] public void TestFindImplementTypes_2() { var types = Reflection.FindImplementTypes( this.GetType().Assembly ); Assert.Equal( 2, types.Count ); Assert.Equal( typeof( A ), types[0] ); Assert.Equal( typeof( B ), types[1] ); } /// /// 测试查找实现类型列表 - 泛型实现 /// [Fact] public void TestFindImplementTypes_3() { var types = Reflection.FindImplementTypes( this.GetType().Assembly ); Assert.Equal( 2, types.Count ); Assert.Equal( typeof( B ), types[0] ); Assert.Equal( typeof( D<> ), types[1] ); } /// /// 测试查找实现类型列表 - 泛型参数为E /// [Fact] public void TestFindImplementTypes_4() { var types = Reflection.FindImplementTypes>( this.GetType().Assembly ); Assert.Single( types ); Assert.Equal( typeof( E ), types[0] ); } /// /// 测试查找实现类型列表 - 泛型参数为空 /// [Fact] public void TestFindImplementTypes_5() { var types = Reflection.FindImplementTypes( typeof( IG<> ), this.GetType().Assembly ); Assert.Equal( 2, types.Count ); Assert.Equal( typeof( E ), types[0] ); Assert.Equal( typeof( F<> ), types[1] ); } /// /// 测试查找实现类型列表 - 测试并发 /// [Fact] public void TestFindImplementTypes_6() { Util.Helpers.Thread.ParallelInvoke( () => { var types = Reflection.FindImplementTypes( this.GetType().Assembly ); Assert.Single( types ); Assert.Equal( typeof( A ), types[0] ); }, () => { var types = Reflection.FindImplementTypes( this.GetType().Assembly ); Assert.Equal( 2, types.Count ); Assert.Equal( typeof( A ), types[0] ); Assert.Equal( typeof( B ), types[1] ); }, () => { var types = Reflection.FindImplementTypes( this.GetType().Assembly ); Assert.Equal( 2, types.Count ); Assert.Equal( typeof( B ), types[0] ); Assert.Equal( typeof( D<> ), types[1] ); } ); } }