C#快速构建单元测试

本文所用项目及源码请访问:https://git.coding.net/oyyz/vip.oyyz.tw2.git

点击查看原题目PDF

这里引用了Thoughtworks的一道编程题进行单元测试学习,点击可查看大图或查看上方PDF原文件。

首先在需要生成测试的类中点击右键,选择创建单元测试

visual studio会为你完成基本框架搭建

可在测试管理器中一键运行所有测试。
先编写测试,再编写实现的测试驱动开发的方法能够极大的降低BUG产生概率。

具体测试编写与题目解决请自行尝试或参考源码,笔者也是新手程序员,源码仅供参考。

如果需要对private方法进行测试,请使用反射,以下为封装的方法

        /// <summary>
        /// 调用静态方法
        /// </summary>
        /// <param name="t">类全名</param>
        /// <paramname="strMethod">方法名</param>
        /// <paramname="aobjParams">参数表</param>
        /// <returns>函数返回值</returns>
        public static object RunStaticMethod(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(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(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;
            }
        }

最后再附赠一道适合学习单元测试编写的小问题:Thoughtworks2017-chengdu编程题