/*------------------------------------------------------------------------------ * 文件名: Type2ValueConvert.cs * 功能說明: 用于创建将类型转换为可能的数据数组 * * 創建人: it_Eric * 創建時間: 10/30/2013 10:15:20 AM * * 修改人: * 修改說明: * *-----------------------------------------------------------------------------*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace netsystemsautotest { /// <summary> /// 类型和值的转换类 /// </summary> public class Type2ValueConvert { private Type _type; public Type2ValueConvert(Type type) { this._type = type; } /// <summary> /// 传入对应的类型返回默认值 /// </summary> /// <param name="type"></param> /// <returns></returns> public object Type2Value() { if (_type == typeof(int)) { return list2object<int>(Int2Value()); } else if (_type == typeof(uint)) { return list2object<uint>(UInt2Value()); } else if (_type == typeof(short)) { return list2object<short>(Short2Value()); } else if (_type == typeof(ushort)) { return list2object<ushort>(UShort2Value()); } else if (_type == typeof(long)) { return list2object<long>(Long2Value()); } else if (_type == typeof(ulong)) { return list2object<ulong>(ULong2Value()); } else if (_type == typeof(double)) { return list2object<double>(Double2Value()); } else if (_type == typeof(float)) { return list2object<float>(Float2Value()); } else if (_type == typeof(string)) { return list2object<string>(String2Value()); } else if (_type == typeof(bool)) { return list2object<bool>(Bool2Value()); } else if (_type == typeof(char)) { return list2object<char>(Char2Value()); } else if (_type == typeof(byte)) { return list2object<byte>(Byte2Value()); } else if (_type == typeof(DateTime)) { return list2object<DateTime>(Datetimes2Value()); } else { return Object2Value(); } } private List<object> list2object<T>(List<T> lst) { List<object> result = new List<object>(); foreach (T item in lst) { result.Add(item); } return result; } private List<DateTime> Datetimes2Value() { List<DateTime> lst = new List<DateTime>(); lst.Add(DateTime.Now); lst.Add(DateTime.Today); lst.Add(DateTime.MaxValue); lst.Add(DateTime.MinValue); return lst; } private List<object> Object2Value() { List<object> lst = new List<object>(); lst.Add(null); return lst; } private List<byte> Byte2Value() { List<byte> lst = new List<byte>(); lst.Add(byte.MaxValue); lst.Add(byte.MinValue); lst.Add(default(byte)); return lst; } private List<char> Char2Value() { List<char> lst = new List<char>(); lst.Add((char)new Random().Next(33, 126)); return lst; } private List<bool> Bool2Value() { List<bool> lst = new List<bool>(); lst.Add(true); lst.Add(false); return lst; } private List<string> String2Value() { List<string> lst = new List<string>(); lst.Add(string.Empty); lst.Add(null); lst.Add("abcdefghijklmnopqrstuvwxyz"); lst.Add("abcdefghijklmnopqrstuvwxyabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabc" + "defghijklmnopqrstuvwxyzzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"); return lst; } private List<float> Float2Value() { List<float> lst = new List<float>(); lst.Add(float.MaxValue); lst.Add(float.MinValue); lst.Add(0); lst.Add((float)new Random().Next(int.MinValue, int.MaxValue)); return lst; } private List<double> Double2Value() { List<double> lst = new List<double>(); lst.Add(double.MaxValue); lst.Add(double.MinValue); lst.Add(0); lst.Add((double)new Random().Next(int.MinValue, int.MaxValue)); return lst; } private List<long> Long2Value() { List<long> lst = new List<long>(); lst.Add(long.MaxValue); lst.Add(long.MinValue); lst.Add(0); lst.Add((long)new Random().Next(int.MinValue, int.MaxValue)); return lst; } private List<ulong> ULong2Value() { List<ulong> lst = new List<ulong>(); lst.Add(ulong.MaxValue); lst.Add(ulong.MinValue); lst.Add(0); lst.Add((ulong)new Random().Next(0, int.MaxValue)); return lst; } private List<short> Short2Value() { List<short> lst = new List<short>(); lst.Add(short.MaxValue); lst.Add(short.MinValue); lst.Add(0); lst.Add((short)new Random().Next(short.MinValue, short.MaxValue)); return lst; } private static List<ushort> UShort2Value() { List<ushort> lst = new List<ushort>(); lst.Add(ushort.MaxValue); lst.Add(ushort.MinValue); lst.Add(0); lst.Add((ushort)new Random().Next(ushort.MinValue, ushort.MaxValue)); return lst; } private List<int> Int2Value() { List<int> lst = new List<int>(); lst.Add(int.MaxValue); lst.Add(int.MinValue); lst.Add(0); lst.Add(new Random().Next(int.MinValue, int.MaxValue)); return lst; } private List<uint> UInt2Value() { List<uint> lst = new List<uint>(); lst.Add(uint.MaxValue); lst.Add(uint.MinValue); lst.Add(0); lst.Add((uint)(new Random().Next(0, int.MaxValue))); return lst; } } }
/*------------------------------------------------------------------------------ * * 文件名: ParamtersAnalysis.cs * 功能說明: 用于创建MemberInfo方法的参数列表 * * 創建人: it_Eric * 創建時間: 10/30/2013 10:15:20 AM * * 修改人: * 修改說明: * *-----------------------------------------------------------------------------*/ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using netsystemsautotest; namespace netsystemsautotest { /// <summary> /// 用于创建MemberInfo方法的参数列表 /// </summary> public class ParamtersAnalysis { public MemberInfo Member { get; set; } private int[] _arrlenght; //记录每维数组的长度的一维数组 private int[] _arrpos; //记录要读取数据的位置 private int _groupcount; //记录总数据长度 private List<List<object>> _paramgrouplst; //记录参数组合 public ParamtersAnalysis(MemberInfo member) { Member = member; Type[] types = AnalysisiParamterType(); _paramgrouplst = AllParameterList(types); _arrlenght = ArrayLenght(_paramgrouplst); _arrpos = new int[_paramgrouplst.Count]; _groupcount = GroupCount(_paramgrouplst); } /// <summary> /// 迭代返回方法参数数组 /// </summary> /// <returns></returns> public IEnumerable<object[]> ReturnParamters() { for (int j = 0; j < _groupcount; j++) { List<object> result = new List<object>(); for (int i = 0; i < _paramgrouplst.Count; i++) { if (_arrpos[i] < _paramgrouplst[i].Count) { result.Add(_paramgrouplst[i][_arrpos[i]]); } } _arrpos = ChangeArrFlag(_arrpos, _arrlenght, _arrpos.Length); yield return result.ToArray(); } } #region 私有方法 /// <summary> /// 获取参数类型 /// </summary> /// <returns></returns> private Type[] AnalysisiParamterType() { List<Type> lst = new List<Type>(); if (Member.MemberType == MemberTypes.Method) { ParameterInfo[] paramters = ((MethodInfo) Member).GetParameters(); foreach (var parameterInfo in paramters) { lst.Add(parameterInfo.ParameterType); } } else if (Member.MemberType == MemberTypes.Property) { lst.Add(((PropertyInfo) Member).PropertyType); } else if (Member.MemberType == MemberTypes.Constructor) { ParameterInfo[] paramters = ((ConstructorInfo) Member).GetParameters(); foreach (var parameterInfo in paramters) { lst.Add(parameterInfo.ParameterType); } } return lst.ToArray(); } /// <summary> /// 用数组保存每一个元素的长度 /// </summary> /// <param name="paramgrouplst"></param> /// <returns></returns> private int[] ArrayLenght(List<List<object>> paramgrouplst) { int[] arrlenght = new int[paramgrouplst.Count]; for (int i = 0; i < paramgrouplst.Count; i++) { arrlenght[i] = paramgrouplst[i].Count - 1; } return arrlenght; } /// <summary> /// 控制遍历的顺序 /// </summary> /// <param name="arrpos"></param> /// <param name="arrlength"></param> /// <returns></returns> private int[] ChangeArrFlag(int[] arrpos, int[] arrlength, int indexflag) { int[] arrposvalue = arrpos; int index = indexflag - 1; if (index < 0) { return arrlength; } if (arrpos[index] < arrlength[index]) { arrposvalue[index]++; } else { arrposvalue[index] = 0; arrposvalue = ChangeArrFlag(arrposvalue, arrlength, index); } return arrposvalue; } /// <summary> /// 计算组合数量 /// </summary> /// <param name="paramgrouplst"></param> /// <returns></returns> private int GroupCount(List<List<object>> paramgrouplst) { int group = 1; for (int i = 0; i < paramgrouplst.Count; i++) { group = group*paramgrouplst[i].Count; //计算组合数量 } return group; } /// <summary> /// 获取参数组合的二维数组 /// </summary> /// <param name="types"></param> /// <returns></returns> private List<List<object>> AllParameterList(Type[] types) { List<List<object>> paramgrouplst = new List<List<object>>(); foreach (Type type in types) { List<object> lst = (List<object>) new Type2ValueConvert(type).Type2Value(); paramgrouplst.Add(lst); } return paramgrouplst; } #endregion } }