zoukankan      html  css  js  c++  java
  • c# 单元测试 ,对静态方法(static)和私有方法(private) 进行单元测试

    利用反射:

     /// <summary>
            /// 调用静态方法
            /// </summary>akf
            /// <param name="t">类全名</param>
    
            /// <paramname="strMethod">方法名</param>
    
            /// <paramname="aobjParams">参数表</param>
    
            /// <returns>函数返回值</returns>
    
            public static object RunStaticMethod(System.Type t, string strMethod, object[] aobjParams)
            {
    
                BindingFlags eFlags =
    
                BindingFlags.Static | BindingFlags.Public |
    
                 BindingFlags.NonPublic;
    
                return RunMethod(t, strMethod,
    
                 null, aobjParams, eFlags);
    
            }
    
            /// <summary>
    
            /// 调用实例方法
    
            /// </summary>
    
            /// <param name="t">类全名</param>
    
            /// <paramname="strMethod">方法名</param>
    
            /// <paramname="objInstance">类的实例</param>
    
            ///<paramname="aobjParams">参数表</param>
    
            ///<returns>函数返回值</returns>
    
    
    
            public static object RunInstanceMethod(System.Type t, string strMethod,
    
             object objInstance, object[] aobjParams)
            {
    
                BindingFlags eFlags = BindingFlags.Instance | BindingFlags.Public |
    
                 BindingFlags.NonPublic;
    
                return RunMethod(t, strMethod,
    
                 objInstance, aobjParams, eFlags);
    
            }
    
    
    
            private static object RunMethod(System.Type t, string
    
             strMethod, object objInstance, object[] aobjParams, BindingFlags eFlags)
            {
    
                MethodInfo m;
    
                try
                {
    
                    m = t.GetMethod(strMethod, eFlags);
    
                    if (m == null)
                    {
    
                        throw new ArgumentException("There is no method '" +
    
                         strMethod + "' for type'" + t.ToString() + "'.");
    
                    }
    
                    object objRet = m.Invoke(objInstance, aobjParams);
    
                    return objRet;
    
                }
    
                catch
                {
    
                    throw;
    
                }
    
            }
    

      

    在测试的时候例子:

    假如在windows form1中有2个方法,分别是一个静态方法和一个私有实例方法如下:

    private static string StaticMethod(string s, int i)
            {
    
    
                return  s+i;
            
            }
    
    
            private string InstanceMethod(string s, int i)
            {
    
    
                return s + i;
    
            }
    

      

    测试代码可以这样调用:

    [TestMethod]
    public void TestInstanceMethod()
    {

    Form1 f = new Form1();
    //f.msg(f);
    //f.button1_Click(null, null);

    string ret = "" + RunInstanceMethod(typeof(Form1), "InstanceMethod", f, new object[] { "123", 123 });

    Assert.AreEqual(ret, "123123");

    }


    [TestMethod]
    public void TestStaticMethod()
    {

    string ret = "" + RunStaticMethod(typeof(Form1), "StaticMethod", new object[] { "123", 123 });

    Assert.AreEqual(ret, "123123");


    }

  • 相关阅读:
    hive与hbase整合
    待重写
    hive DML
    【知识强化】第六章 总线 6.1 总线概述
    【知识强化】第五章 中央处理器 5.1 CPU的功能和基本结构
    【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念
    【知识强化】第四章 指令系统 4.2 指令寻址方式
    【知识强化】第四章 指令系统 4.1 指令格式
    【知识强化】第三章 存储系统 3.6 高速缓冲存储器
    【知识强化】第三章 存储系统 3.5 双口RAM和多模块存储器
  • 原文地址:https://www.cnblogs.com/wgscd/p/11586371.html
Copyright © 2011-2022 走看看