一、moles使用注意事项
- 被测类要使用public修饰符,不然无法使用生成的moles.dll。
- 测试方法要使用[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) { } }
可以看出,moles将带参函数A改编成AInt32,可能是为了处理重载函数吧。MProgram.AllInstances.AInt32 = (content, b) => { return "ys"+b;// () => "yes"; }; var m2 = new MProgram(); Program p2 = m2.Instance; Assert.AreEqual("ys4", p2.A(4));
三、moles缺点
- 对源代码的每次修改,测试工程都必须rebuild才能生效。
- 等等....