根据接口的定义,自动生成符合这个接口的mock class。
class Program
{
private static string assemblyFullName;
private static string interfaceName;
private static string outputFileName;
static void Main(string[] args)
{
assemblyFullName = @"C:\IGT_0803\development\dev_sbx_41\EGS\sb\lib\AnyCpu\debug\IGT.SB.PTN.Contracts.dll";
interfaceName = "IGT.SB.PTN.Contracts.IPTNG2SHostServices";
outputFileName = @"C:\Users\xingy\Desktop\mock.cs";
StringBuilder totalContent = new StringBuilder();
StringBuilder methodBody = new StringBuilder();
StringBuilder extraMembers = new StringBuilder();
Assembly ass = Assembly.LoadFrom(assemblyFullName);
Type tt = ass.GetType(interfaceName);
MethodInfo[] miArray = tt.GetMethods();
foreach (MethodInfo info in miArray)
{
methodBody.Clear();
extraMembers.Clear();
ParameterInfo returnParam = info.ReturnParameter;
bool isReturnVoid = returnParam.ParameterType.FullName.Equals("System.Void",
StringComparison.
InvariantCultureIgnoreCase)
? true
: false;
methodBody.Append("public ");
methodBody.Append(returnParam + " ");
methodBody.Append(info.Name).Append("(");
string nameOfIsCalled = "Is" + info.Name + "Called";
extraMembers.Append("public bool ")
.Append(nameOfIsCalled)
.Append(";")
.Append(Environment.NewLine);
if (!isReturnVoid)
{
extraMembers.Append("public ")
.Append(returnParam.ParameterType)
.Append(" ").Append(info.Name).Append("_actualReturnValue")
.Append(Environment.NewLine);
}
ParameterInfo[] paras = info.GetParameters();
foreach (ParameterInfo parameterInfo in paras)
{
extraMembers.Append("public ")
.Append(parameterInfo.ParameterType.ToString()).Append(" ")
.Append(parameterInfo.Name).Append("_actualValue")
.Append(";")
.Append(Environment.NewLine);
}
totalContent.Append(extraMembers.ToString());
foreach (ParameterInfo parameterInfo in paras)
{
methodBody.Append(parameterInfo.ParameterType.ToString())
.Append(" ")
.Append(parameterInfo.Name);
}
methodBody.Append(")").Append(Environment.NewLine);
methodBody.Append("{").Append(Environment.NewLine);
methodBody.Append(" ")
.Append(nameOfIsCalled)
.Append(" = true;")
.Append(Environment.NewLine);
methodBody.Append(Environment.NewLine);
foreach (ParameterInfo parameterInfo in paras)
{
methodBody
.Append(" ")
.Append(parameterInfo.Name)
.Append("_actualValue")
.Append(" = ")
.Append(parameterInfo.Name)
.Append(";")
.Append(Environment.NewLine);
}
if (!isReturnVoid)
{
methodBody
.Append(" ")
.Append("return ")
.Append(info.Name).Append("_actualReturnValue")
.Append(";")
.Append(Environment.NewLine);
}
methodBody.Append("}").Append(Environment.NewLine);
totalContent.Append(methodBody.ToString()).Append(Environment.NewLine);
}
Console.WriteLine(totalContent);
File.WriteAllText(outputFileName, totalContent.ToString());
Console.Read();
}
}
{
private static string assemblyFullName;
private static string interfaceName;
private static string outputFileName;
static void Main(string[] args)
{
assemblyFullName = @"C:\IGT_0803\development\dev_sbx_41\EGS\sb\lib\AnyCpu\debug\IGT.SB.PTN.Contracts.dll";
interfaceName = "IGT.SB.PTN.Contracts.IPTNG2SHostServices";
outputFileName = @"C:\Users\xingy\Desktop\mock.cs";
StringBuilder totalContent = new StringBuilder();
StringBuilder methodBody = new StringBuilder();
StringBuilder extraMembers = new StringBuilder();
Assembly ass = Assembly.LoadFrom(assemblyFullName);
Type tt = ass.GetType(interfaceName);
MethodInfo[] miArray = tt.GetMethods();
foreach (MethodInfo info in miArray)
{
methodBody.Clear();
extraMembers.Clear();
ParameterInfo returnParam = info.ReturnParameter;
bool isReturnVoid = returnParam.ParameterType.FullName.Equals("System.Void",
StringComparison.
InvariantCultureIgnoreCase)
? true
: false;
methodBody.Append("public ");
methodBody.Append(returnParam + " ");
methodBody.Append(info.Name).Append("(");
string nameOfIsCalled = "Is" + info.Name + "Called";
extraMembers.Append("public bool ")
.Append(nameOfIsCalled)
.Append(";")
.Append(Environment.NewLine);
if (!isReturnVoid)
{
extraMembers.Append("public ")
.Append(returnParam.ParameterType)
.Append(" ").Append(info.Name).Append("_actualReturnValue")
.Append(Environment.NewLine);
}
ParameterInfo[] paras = info.GetParameters();
foreach (ParameterInfo parameterInfo in paras)
{
extraMembers.Append("public ")
.Append(parameterInfo.ParameterType.ToString()).Append(" ")
.Append(parameterInfo.Name).Append("_actualValue")
.Append(";")
.Append(Environment.NewLine);
}
totalContent.Append(extraMembers.ToString());
foreach (ParameterInfo parameterInfo in paras)
{
methodBody.Append(parameterInfo.ParameterType.ToString())
.Append(" ")
.Append(parameterInfo.Name);
}
methodBody.Append(")").Append(Environment.NewLine);
methodBody.Append("{").Append(Environment.NewLine);
methodBody.Append(" ")
.Append(nameOfIsCalled)
.Append(" = true;")
.Append(Environment.NewLine);
methodBody.Append(Environment.NewLine);
foreach (ParameterInfo parameterInfo in paras)
{
methodBody
.Append(" ")
.Append(parameterInfo.Name)
.Append("_actualValue")
.Append(" = ")
.Append(parameterInfo.Name)
.Append(";")
.Append(Environment.NewLine);
}
if (!isReturnVoid)
{
methodBody
.Append(" ")
.Append("return ")
.Append(info.Name).Append("_actualReturnValue")
.Append(";")
.Append(Environment.NewLine);
}
methodBody.Append("}").Append(Environment.NewLine);
totalContent.Append(methodBody.ToString()).Append(Environment.NewLine);
}
Console.WriteLine(totalContent);
File.WriteAllText(outputFileName, totalContent.ToString());
Console.Read();
}
}