动态调用最新测试类

需求分析:很多时候,我们不经意的经常要写一些测试方法,然而每次花时间都去新建一个项目,显然非常浪费时间。下面我针对测试项目需求,做了一个小型的测试项目,以供经常对一些方法和类做测试使用的项目来使用。

ITest接口:

//模拟普通启动的入口,至于更多的扩展功能,可以在这里定义。例如自带测试数据等.

public interface ITest

{
        void Main(string[] args);
    }

在该项目下建立一个myClass类:

public class myClass:ITest
    {
        public void Main(string[] args)
        {
            Console.WriteLine("接口函数调用!"); 
        }
    }

由于我们每建立一个类,他都有一个新的特定就是,文件的时间是最新的,所以利用这个特性我们写个搜索的方法:

/// <summary>
        /// 获取最新的项目.cs文件,并且满足继承ITest接口
        /// </summary>
        /// <param name="diWorkPlace">工作目录</param>
        /// <param name="StrPram">搜索条件</param>
        /// <returns>最新的文件.cs,并且满足继承ITest接口</returns>
        private static FileInfo GetLastFile(DirectoryInfo diWorkPlace,string StrPram)
        {
            FileInfo lastf=null;
            DirectoryInfo[] dis = diWorkPlace.GetDirectories();
            for (int i = 0; i < dis.Length; i++)
            {
                FileInfo tfi = GetLastFile(dis[i], StrPram);
                if (tfi==null)
                {
                    continue;
                }
                if (lastf == null || tfi.LastWriteTime > lastf.LastWriteTime)
                {
                    if (isWant(tfi))
                    {
                        lastf = tfi;
                    }
                }
            }

FileInfo[] fis = diWorkPlace.GetFiles(StrPram);
            for (int i = 0; i < fis.Length; i++)
            {
                if (lastf == null||fis[i].LastWriteTime > lastf.LastWriteTime)
                {
                    if (isWant(fis[i]))
                    {
                        lastf = fis[i];
                    }
                }
            }
            return lastf;
        }

/// <summary>
        /// 是否为需要的文件,在GetLastFile文件要用到
        /// </summary>
        /// <param name="lastFile">传入要做判断的文件</param>
        /// <returns>是为需要的</returns>
        private static bool isWant(FileInfo lastFile)
        {
            bool flg = false;
            string[] codes = File.ReadAllLines(lastFile.FullName, Encoding.Default);
            for (long i = 0; i < codes.LongLength; i++)
            {
                if (codes[i].Contains("namespace"))
                {
                    for (long j = i + 1; j < codes.LongLength; j++)
                    {
                        if ( codes[j].Contains("ITest")&&codes[j].Contains("class") )
                        {
                            int ib = codes[j].IndexOf("class");
                            int ie = codes[j].IndexOf("ITest");
                            if (ie>ib)
                            {
                                flg = true;
                            }
                        }
                    }
                    break;
                }
            }
            return flg;
        }

以上完成后,我们需要对该文件的里面类人进行筛选,得到全命名空间,以共反射使用:

/// <summary>
        /// 返回符合ITest接口的全空间名称
        /// </summary>
        /// <param name="lastFile">最新的文件</param>
        /// <returns>命名空间名称</returns>
        private static string getFullName(FileInfo lastFile)
        {
            string FullName = "";
            string[] codes = File.ReadAllLines(lastFile.FullName, Encoding.Default);
            string NameSapce = "";
            string ClassName = "";
            for (long i = 0; i < codes.LongLength; i++)
            {
                if (codes[i].Contains("namespace"))
                {
                    NameSapce = codes[i].Replace("namespace", "").Trim();
                    for (long j = i + 1; j < codes.LongLength; j++)
                    {
                        if (codes[j].Contains("ITest") && codes[j].Contains("class"))
                        {
                            int ib = codes[j].IndexOf("class") + 6;
                            int ie = codes[j].IndexOf(":");
                            ClassName = codes[j].Substring(ib, ie - ib).Trim();
                            FullName = NameSapce + "." + ClassName;
                        }
                    }
                    break;
                }
            }
            return FullName;
        }

以上都是为下面的主函数做铺垫:

public class Program
    {
        public static void Main(string[] args)

{

Console.ForegroundColor = ConsoleColor.Yellow;
            DirectoryInfo di = new DirectoryInfo(Directory.GetCurrentDirectory());
            DirectoryInfo diWorkPlace = di.Parent.Parent;
            FileInfo lastFile = GetLastFile(diWorkPlace, "*.cs");
            string ClassFullName = getFullName(lastFile);
            var asm = Assembly.GetEntryAssembly();
            var typ = asm.GetType(ClassFullName);
            ITest instance = (ITest)asm.CreateInstance(ClassFullName);
            var method = typ.GetMethod("Main");
            instance.Main(args);
        }

}

总结:通过上面的主函数代码的实现,就可以实现只要一新建一个类实现ITest就可以智能的进入最新的类做测试了。

时间: 2024-10-12 20:43:29

动态调用最新测试类的相关文章

python 动态调用模块、类、方法(django项目)

需求:近一段时间基于django框架,开发各业务层监控代码,每个业务的监控逻辑不同,因此需要开发监控子模块,动态的导入调用. 项目名称:demo_django App:common_base.monitor_master 监控子模块:demo_django/common_base/modules/classname.py # -*- coding: utf-8 -*- class classname(object): def mod1(self): print "mod1" def m

Asp.Net 动态调用WebServices解决方案

放狗搜索动态调用webservices 的类,太多.问题挺纠结的.公司需要net调用java的webservices接口,蛋疼的是java端的接口,全部传入String类型的数据.蛋疼啊,接口你不编写成传递参数的形式就算了,尼玛,传递的对象是String(把xml格式化成string类型,在使用报文发送),返回也是String,我纳闷了.按照这个思路,Java端接收报文数据使用Object,返回Object,接口的兼容性岂不是提高了狠多?偏题了... 1.webservices动态类代码 usi

动态调用WebService时动态获取返回Class中的属性

直接给代码: var ret = HTTPS.WSHelper.InvokeWebService("WebService URL", "MethodName", object[] args);var type = ret.GetType();var propertyinfo = type.GetProperty("result");if (propertyinfo == null){       throw new Exception("

http请求POST和GET调用接口以及反射动态调用Webservices类

此代码是API.WebSrvices动态调用的类,做接口调用时很实用. Webservices动态调用使用反射的方式很大的缺点是效率低,若有更好的动态调用webservices方法,望各位仁兄不吝贴上代码. using System; using System.IO; using System.Net; using System.Text; using System.Web; using System.Collections.Generic; using System.CodeDom.Compi

struts_2_Action类中方法的动态调用

(一)直接调用方法(不推荐使用) 1)Action类: private String savePath; public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; } public String other() { savePath = "other"; return "success";

java动态载入指定的类或者jar包反射调用其方法

序言 有时候.项目中会用到java动态载入指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大减少,更加的模块化.代码利用率更高.模式中的代理模式就用到java的这一机制. 下边就让我们通过代码来看看怎样实现此功能. 代码具体 package loadjarclass; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoa

动态调用web服务,当有实体类的时候 (只用于一个)

public class CCBWebSeviceHelper { public static int rowCount = 0; /// < summary> /// 动态调用web服务,当有实体类的时候 (只用于一个) /// < /summary> /// < param name="url">WSDL服务地址< /param> /// < param name="classname">类名<

java测试类调用LDAP服务器客户端信息实行增删改查

如下是我自写的java测试类调用客户端配置好的用户信息: package com; import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; impor

[转]Net 下采用GET/POST/SOAP方式动态调用WebService C#实现

本文转自:http://www.cnblogs.com/splendidme/archive/2011/10/05/2199501.html 一直以来,我们都为动态调用WebService方法而烦恼.在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出错,似乎要重新绑定Webservice并重新编译后才能再次运行.我无意中通过百度搜索找了一个采用GET/POST/SOAP方式动态调用WebService的