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] );
} );
}
}