mock class generator

來源:互聯網
上載者:User

根據介面的定義,自動產生符合這個介面的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();
        }

    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.