zoukankan      html  css  js  c++  java
  • PythonTest

    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using IronPython.Hosting;
    using Microsoft.Scripting.Hosting;
    using Shiji.Base;
    using Shiji.HR.Dal;

    namespace Test.Bll
    {
        
    /// <summary>
        
    /// PythonTest 的摘要说明
        
    /// </summary>
        [TestClass]
        
    public class PythonTest
        {
            ScriptEngine engine;
            ScriptScope scope;

            
    public PythonTest()
            {
                engine 
    = Python.CreateEngine();
                scope 
    = engine.CreateScope();
            }

            
    private TestContext testContextInstance;

            
    /// <summary>
            
    ///获取或设置测试上下文,该上下文提供
            
    ///有关当前测试运行及其功能的信息。
            
    ///</summary>
            public TestContext TestContext
            {
                
    get
                {
                    
    return testContextInstance;
                }
                
    set
                {
                    testContextInstance 
    = value;
                }
            }

            

            [TestMethod]
            
    public void 测试简单表达式()
            {
                var strExpression 
    = "1+2";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                var actual 
    = sourceCode.Execute<int>();

                Assert.AreEqual(
    3, actual);
            }

            [TestMethod]
            
    public void 测试传入变量()
            {
                var strExpression 
    = "\"Hello:\" + str";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "str""Python");
                var actual 
    = sourceCode.Execute<string>(scope);
                scope.RemoveVariable(
    "str");
                Assert.AreEqual(
    "Hello:Python", actual);
            }


            [TestMethod]
            
    public void 测试C引用Python函数()
            {
                var strExpression 
    = @"
    def MyFunction(n):
        return 2*n 
                    
    ";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression).Compile().Execute(scope);

                var func 
    = engine.GetVariable<Func<intint>>(scope, "MyFunction");

                Assert.AreEqual(
    0, func(0));
                Assert.AreEqual(
    2, func(1));
                Assert.AreEqual(
    4, func(2));
            }

            [TestMethod]
            
    public void 测试Python引用C函数()
            {
                var strExpression 
    = "CMethod('Python')";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "CMethod", (Func<stringstring>)TMethod);
                var actual 
    = sourceCode.Execute<string>(scope);
                scope.RemoveVariable(
    "CMethod");
                Assert.AreEqual(
    "Hello:Python", actual);
            }

            
    public string TMethod(string info)
            {
                
    return "Hello:" + info;
            }

            [TestMethod]
            
    public void 测试Python引用C函数2()
            {
                var strExpression 
    = "CMethod('Python')";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "CMethod", (Func<stringstring>)T2Method);
                var actual 
    = sourceCode.Execute<string>(scope);
                scope.RemoveVariable(
    "CMethod");
                Assert.AreEqual(
    "Hello:Python", actual);
            }

            
    public string T2Method(string info)
            {
                
    return TMethod(info);
            }

            [TestMethod]
            
    public void 测试Linq1()
            {
                var mc 
    = App.DB.GetTable<HR_MetaClass>().First(p => p.Code == "HR_Catalog");
                
    //mc.HR_MetaProperty.Count
                
    //此处调用属性
                var strExpression = "mc.HR_MetaProperty.Count";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "mc", mc);
                var actual 
    = sourceCode.Execute<int>(scope);
                scope.RemoveVariable(
    "mc");
                Assert.AreEqual(
    12, actual);
            }

            [TestMethod]
            
    public void 测试Linq2()
            {
                var mc 
    = App.DB.GetTable<HR_MetaClass>().First(p => p.Code == "HR_Catalog");
                
    //mc.HR_MetaProperty.Count
                
    //此处调用方法,具体可以参看http://blogs.msdn.com/sreekarc/archive/2007/05/01/extension-methods-and-delegates.aspx

                var strExpression 
    = @"
    import clr
    clr.AddReference('System.Core')
    from System.Linq import*
    Enumerable.Count(mc.HR_MetaProperty)
    ";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "mc", mc);
                var actual 
    = sourceCode.Execute<int>(scope);
                scope.RemoveVariable(
    "mc");
                Assert.AreEqual(
    12, actual);


            }

            [TestMethod]
            
    public void 测试Linq3()
            {
                var mc 
    = App.DB.GetTable<HR_MetaClass>().First(p => p.Code == "HR_Catalog");
                var strExpression 
    = @"
    import clr
    clr.AddReference('System.Core')
    from System.Linq import*
    Enumerable.First(mc.HR_MetaProperty,lambda p:p.Code=='Code')
    ";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "mc", mc);
                var actual 
    = sourceCode.Execute<HR_MetaProperty>(scope);
                scope.RemoveVariable(
    "mc");
                Assert.AreEqual(
    "Code", actual.Code);
            }

        }
    }
  • 相关阅读:
    Orcle数据库查询练习复习:二
    Orcle数据库查询练习复习:一
    Xamarin.Android 入门之:xamarin使用webserver和html交互
    Xamarin.Android 入门之:Listview和adapter
    Xamarin.Android 入门之:Android的生命周期
    Xamarin.Android 入门之:Android API版本设置
    Xamarin.Android 入门之:Xamarin快速入门
    阶段01Java基础day16集合框架02
    阶段01Java基础day13常见对象02
    阶段01Java基础day10面向对象05
  • 原文地址:https://www.cnblogs.com/rock_chen/p/1650942.html
Copyright © 2011-2022 走看看