Welcome 微信登录

首页 / 网页编程 / ASP.NET / 微型项目实践(2):用测试驱动代码生成

微型项目实践(2):用测试驱动代码生成2011-11-24 博客园 冬冬上一篇文章中,我们分析了系统的两个实体类,并且给出了对应的实体XML。今天我们来看看如何根据 这个XML进行代码生成。

  1: <?xml version="1.0" encoding="utf-8" ?>  2: <Entities xmlns="http://it.ouc.edu.cn/EntityDescription/V2">  3:  <Entity title="日志" name="Blog" module="Blogs">  4:   <Item title="标题" name="Title" type="text" require="true"/>  5:   <Item title="内容" name="Content" type="longtext" require="false"/>  6:   <Item title="所属分类" name="BlogClass" type="entity" entityName="BlogClass" require="false"/>  7:   <Item title="创建时间" name="CreateDateTime" type="datetime" require="true"/>  8:   <Item title="更新时间" name="UpdateDateTime" type="datetime" require="true"/>  9:  </Entity> 10:  <Entity title="日志分类" name="BlogClass" module="Blogs"> 11:   <Item title="名称" name="Name" type="text" require="true"/> 12:   <Item title="描述" name="Description" type="text" require="false"/> 13:  </Entity> 14: </Entities>
这里我们主要是生成两种最重要的代码,一是数据库的建库脚本,二是实体的CS类。

我们使用测试来驱动代码生成,在项目DongBlog.Test中添加一个新的单元测试:Util.cs。对应的代 码如下:

  1: using ... 12:  13: namespace DongBlog.Test 14: { 15:   /// <summary> 16:   /// 数据库相关的工具方法 17:   /// </summary> 18:   [TestClass] 19:   public class DatabaseUtil 20:   { 21:     /// <summary> 22:     /// 构造建库脚本 23:     /// </summary> 24:     [TestMethod, Description("构造建库脚本")] 25:     public void Util_CreateDatabaseScript() 26:     { 27:       var entities = getEntities(); 28:       string sqlText = MsSqlServerScriptBuilder.getSqlScript(entities); 29:  30:       Debug.WriteLine(""); 31:       Debug.WriteLine("The following is the database creating script:"); 32:       Debug.WriteLine("=============================彪悍的分割线=============================================================================="); 33:       Debug.WriteLine(""); 34:       Debug.WriteLine(""); 35:       Debug.WriteLine(sqlText); 36:       Debug.WriteLine(""); 37:       Debug.WriteLine(""); 38:       Debug.WriteLine("=============================又见彪悍的分割线=========================================================================="); 39:     } 40:  41:     private Entity[] getEntities() 42:     { 43:       XmlDocument document = new XmlDocument(); 44:       document.Load(Gobal.EntityXmlFileName); 45:       return EntityXmlParser.ParseXml(document); 46:     } 47:   } 48: }