单元测试之moles

来源:互联网 发布:玉溪餐饮软件yxqlkj 编辑:程序博客网 时间:2024/04/30 22:09
一、moles使用注意事项
  1. 被测类要使用public修饰符,不然无法使用生成的moles.dll。
  2. 测试方法要使用[HostType("Moles")]标记。

二、moles模拟函数


1.静态函数

源代码:

   public class Program    {        public int a { get; set; }        public static string A()        {            return "hello";        }        static void Main(string[] args)        {        }    }

测试代码:

  MProgram.A = () => "yes";  Assert.AreEqual("hello", Program.A());

2、一般函数

源代码:

    public class Program    {        public int a { get; set; }        public string A()        {            return "hello";        }        static void Main(string[] args)        {        }    }

测试代码:

            MProgram.AllInstances.A = _ => "yes";            var m = new MProgram()            {                A=()=>"no"            };            var m2 = new MProgram();            Program p = m.Instance;            Program p2 = m2.Instance;            Assert.AreEqual("yes",p.A());            Assert.AreEqual("no",p2.A());

4、属性

源代码

    public class Program    {        public int a { get; set; }        public  string A()        {            return "hello";        }        static void Main(string[] args)        {        }    }
测试代码

            MProgram.AllInstances.aGet = _ => 5;            MProgram m = new MProgram();            Program p = m.Instance;                        Assert.AreEqual(5,p.a);

5、构造函数

源代码:

    public class Program    {        public int a { get; set; }        public  string A()        {            return "hello";        }        public Program(int a)        {            this.a = a;        }        static void Main(string[] args)        {        }    }
测试代码:

            MProgram.ConstructorInt32 = (@this, value) =>            {                var mp = new MProgram(@this)                {                    aGet = ()=>value                };            };            Program pp = new Program(5);            MProgram m = new MProgram(pp);            Program p = m.Instance;                        Assert.AreEqual(5,p.a);

6、带参函数

上面的函数都是没有参数的有木有?下面来个带参的

源代码:

    public class Program    {        public int a { get; set; }        public string A(int a)        {            return "hello";        }        static void Main(string[] args)        {        }    }
测试代码:

            MProgram.AllInstances.AInt32 = (content, b) =>            {                                    return "ys"+b;// () => "yes";            };            var m2 = new MProgram();            Program p2 = m2.Instance;            Assert.AreEqual("ys4", p2.A(4));
可以看出,moles将带参函数A改编成AInt32,可能是为了处理重载函数吧。

三、moles缺点


  1. 对源代码的每次修改,测试工程都必须rebuild才能生效。
  2. 等等....

原创粉丝点击