您的位置:首页 > 其它

使用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;
}
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐