使用ExpressionAnalysis、LexicalAnalysis以及DynamicDataSet为项目添加脚本功能
2010-07-02 13:33
495 查看
之前陆陆续续的实现了LexicalAnalysis,DynamicDataSet以及ExpressionAnalysis的功能,今天就来讲讲如何利用它们来为项目添加一个脚本功能。
有时我们需要在项目中动态的执行一些简单的条件判断,比如在写一个自动测试的框架的时候,我们必须支持用户可以手动的写一些Check脚本。比如说
我们完成了一个测试用例,测试完成后我们从数据库中取到了很多的这个测试用例相关的表的数据,其中有的数据是在这个测试用例中创建的,也有的数据
是在这个测试中被修改的,还有的数据是被删除的,因此为了验证这个测试用例的结果我们必须写很多小的断言,如果能支持脚本那写这些断言就很简单了。
usingSystem; usingSystem.Collections.Generic; usingSystem.Data; usingSystem.Diagnostics.Contracts; usingZxf.ExpressionBuilder; namespaceConsoleApplication2 { classProgram { staticvoidMain(string[]args) { dynamicdynamicDataSet=newDynamicDataSet(PrepareDataSet()); vardynamicLambdaExpFunc1=BuildFunc("Data.Test.Message[0].ToString().StartsWith(\"Hello\")",dynamicDataSet); varresult1=dynamicLambdaExpFunc1.Invoke(dynamicDataSet); Contract.Assert((bool)result1==true); vardynamicLambdaExpFunc2=BuildFunc("Data.Test.Message[0].ToString().ToUpper()",dynamicDataSet); varresult2=dynamicLambdaExpFunc2.Invoke(dynamicDataSet); Contract.Assert((string)result2=="Hello,World!".ToUpper()); vardynamicLambdaExpFunc3=BuildFunc("Data.Test.Count==1",dynamicDataSet); varresult3=dynamicLambdaExpFunc3.Invoke(dynamicDataSet); Contract.Assert((bool)result3==true); } privatestaticFunc<DynamicDataSet,object>BuildFunc(stringcode,DynamicDataSetparameter) { List<LexicalBlock>lexicalBlocks=newLexicalAnalysis().Analysis(newstring[]{code}); Dictionary<string,Type>parameterTypes=newDictionary<string,Type>(); parameterTypes.Add("Data",typeof(DynamicDataSet)); returnExpressionAnalysis.Analysis<Func<DynamicDataSet,object>>(lexicalBlocks,parameterTypes); } privatestaticDataSetPrepareDataSet() { DataTabledataTable=newDataTable("Test"); dataTable.Columns.Add("Message",typeof(string)); DataRowdataRow=dataTable.NewRow(); dataRow[0]="Hello,World!"; dataTable.Rows.Add(dataRow); DataSetdataSet=newDataSet(); dataSet.Tables.Add(dataTable); returndataSet; } } }
相关文章推荐
- iOS开发:给项目工程里面添加Podfile配置文件,以及CocoaPods的简单使用
- 迷你播放器--第一阶段(6)--添加搜索定位功能(进阶)-使用filter过滤以及对汉语拼音的排序匹配
- 【iOS开展-94】xcode6如何使用GIT以及如何添加太老项目GIT特征?
- 地址主题java项目中添加邮件发送功能(使用apache commons mail开源项目)
- 【iOS开发-94】xcode6怎么使用GIT以及如何给老得项目增加GIT功能?
- 添加现有项目来重用代码。使用编译功能查找错误。
- 记录一次项目中使用memcatch添加端口以及自动运行
- 怎样在原有项目中,添加使用Ajax Control Toolkit控件功能?
- java项目中添加邮件发送功能(使用apache commons mail开源项目)
- android平台 使用Talarik Platform给项目添加登陆注册云端保存功能
- iOS开发:给项目工程里面添加Podfile配置文件,以及CocoaPods的简单使用
- 目前最新jquery-ui-1.12.1的使用以及如何添加到自己的项目中去
- 通过shell脚本批量部署ssh私钥认证以及批量操作工具pssh的简单使用
- 使用DataSet对象添加记录
- 使用Redis的脚本功能实现Redis中数据简单查询
- 使用 Cocoapods 集成框架 Operation not permitted - /usr/bin/xcodeproj,以及项目出现 Invalid bitcode signature 编译错误
- VS2005项目中添加lib库以及代码中相对路径
- 【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目
- Maven学习笔记(六)-使用Eclipse创建Maven WEB项目以及运行项目的几种方式
- 防止XSS注入script脚本,简单的方法;在项目中也可以使用的安全转码格式。