下载:Personal_Study_Assistant.zip
背景
实际中,我们可能要经常会对一些API或小核心代码不太确定,于是写一些小测试代码,如正则表达式测试。时间久了,这些小项目散落得到处都是,查找和整理起来都比较费时间。
“工欲善其事,必先利其器”,下面让我们来解决一下这个问题吧。
程序的思路是: 1所有的测试文件统一归类存放于不同的Project; 2Project启动时,自动生成所有测试代码的清单,通过输入清单序号选择对应的测试来执行,不用更改Program的Main方法。
(目前还不能显示测试用例对应的文件名)。
效果
说明
继续往下前,建议先下载Demo。
1 Cp.Core
核心层中目前只有一个类和一个接口。接口ITest描述了作为测试实例应该具备的属性和方法。CaseContainer用于扫描当前项目中的测试用例,生成上面的菜单。
代码中使用到的主要知识点为反射。
2 Cp.EmitStudy
有了核心层,下面就开始根据我们的需求,进行分类存放测试实例了。Demo中,以Emit学习为例,那了一个新的Project,类型为控制台类型。
新项目的Program.cs的Main函数只有一行代码:
static void Main(string[] args) { CaseContainer.ShowCases(); }
余下的就是写我们的测试或学习用例了。Demo中Test2为我模拟AutoMapper写的一段代码,用于在两个对象间相互浅复制属性:
class Test2:ITest { class Model { public string Name { get; set; } } class ViewModel { public string Name { get; set; } } public string Name { get { return "Linq Assign Expression Test"; } } public string Description { get { return "This demo demenstrates how to use Linq Expression to mapping properties between two object."; //return "此示例展示了如何利用Linq Expression将两个对象的属性进行映射"; } } public void Test() { Expression<Func<Model, string>> exp1 = m => m.Name; Expression<Func<ViewModel, string>> exp2 = vm => vm.Name; var assignExp = Expression.Assign(exp2.Body, exp1.Body); var mapAction = Expression.Lambda<Action<Model, ViewModel>>(assignExp, exp1.Parameters[0], exp2.Parameters[0]).Compile(); var m1 = new Model() { Name = "MODEL's Name" }; var m2 = new ViewModel(); mapAction(m1, m2); Console.WriteLine(m2.Name); } }
3 后续
余下来要做的就是,写新的用例,放在当前项目下,然后F5。查看和启动都会比较方便。
有时候我们可以为了学习某一个框架或一些代码自己写一些测试Demo,那么我们可以专门建一个新的Study项目。
我们可以把此项目设置一个快捷方式到桌面,脑中灵光一闪想写程序的时候就点吧~