博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态调用最新测试类
阅读量:6765 次
发布时间:2019-06-26

本文共 3189 字,大约阅读时间需要 10 分钟。

hot3.png

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

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就可以智能的进入最新的类做测试了。

转载于:https://my.oschina.net/robortly/blog/415471

你可能感兴趣的文章
总结:栈和队列的学习
查看>>
线段树(可能还会有树状数组吧)
查看>>
Gnome 3.2 发布计划及新功能
查看>>
利用bobo-browse 实现lucene的分组统计功能
查看>>
/MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
查看>>
ubuntu server 使用parted分区
查看>>
solr实现满足指定距离范围条件的搜索
查看>>
[转载]Web前端研发工程师编程能力飞升之路
查看>>
Redis
查看>>
XINS 3.0 正式版发布,远程 API 调用规范
查看>>
(转)Oracle中For和while及一些应用
查看>>
jQuery基础及选择器
查看>>
DragonFly BSD 3.2 发布
查看>>
C#中为什么需要装箱拆箱操作?
查看>>
PHP类中一般方法与静态方法的疑问
查看>>
值得 Web 开发人员收藏的20个 HTML5 实例教程
查看>>
移动设备、手机浏览器Javascript滑动事件代码
查看>>
Ubuntu 中的VI和vim
查看>>
Libgdx window add alpha action change the background actor alpha
查看>>
(转)过滤器原理
查看>>