• 模式应用 - 利用工厂模式制作自己的"小程序测试工厂"


    在平时开发程序的过程中,自己经常会写一些控制台小程序进行测试某个功能,事后我们会寻找这些小程序,
    如果不仔细管理,经常会找不到。
    由于每个控制台小程序都有自己独立的 Main方法,所以我们不能把他们都放在一个Solution里面,这样
    在编译整个项目的时候会通不过,但是又不想为每个小程序都单独建立一个项目,这样又太浪费,因为
    每个都是一个非常简单的代码文件。
    于是我想到了利用工厂模式,我是这样做的:

    首先创建一个ITestCase接口,它有一个Run方法。
    namespace SharpTrainer
    {
        
    interface ITestCase
        {
            
    void Run();
        }
    }

    接着我们为我们的每个小程序建立自己的TestCase类,例如:
    你可以这样做:
    class TestCase1: ITestCase
    {
          public void Run()
          {
                ....;
          }
    }
    class TestCase2: ITestCase
    {
          public void Run()
          {
                ....;
          }
    }

    我举个我实际的TestCase如下:
    using System;

    namespace SharpTrainer
    {
        
    class TestRefParam:ITestCase
        {
            
    public void Run()
            {
                
    string first = "first";
                
    string second = "second";

                Utility.Swap(
    ref first, ref second);

                System.Console.WriteLine(
                    
    @"first = {0}, second = {1}",
                    first, second);

                System.Console.ReadLine();
            }
        }
    }

    Utility类的代码如下:
    namespace SharpTrainer
    {
        
    public class Utility
        {
            
    public static void Swap(ref string first, ref string second)
            {
                
    string temp = first;
                first 
    = second;
                second 
    = temp;
            }
        }
    }

    接下来我们便要创建App配置文件,用于等下
    根据 config 文件的设置用反射创建相应的 TestCase 类型实例返回.
    App.Config代码如下:
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        
    <appSettings>
            
    <add key="testAssembly" value="SharpTrainer"></add>
            
    <add key="testCaseName" value="TestRefParam"></add>
        
    </appSettings>
    </configuration>

    最后在Main方法中利用反射来运行我们的TestCase,如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.Reflection;
    using System.Configuration;

    namespace SharpTrainer
    {
        
    class Program
        {
            
    static void Main(string[] args)
            {
                
    string AssemblyName = ConfigurationSettings.AppSettings["testAssembly"];
                
    string CaseName = ConfigurationSettings.AppSettings["testCaseName"];

                
    string className = AssemblyName + "." + CaseName;
                ITestCase testCase 
    = (ITestCase)Assembly.Load(AssemblyName).CreateInstance(className);
                testCase.Run();
            }
        }
    }

    运行结果如下:
    first = second, second = first


    这样,以后我就可以不断地增加小程序测试用例类,每个TestCase类实现 ITestCase接口,而逻辑都写在
    Run方法里。
    我们要运行哪个 TestCase 只要将App.Config里testCaseName的键值改成相应的TestCase类名就好了。

    以上就是我利用工厂模式实现的自己测试小程序的用例测试工厂。
  • 相关阅读:
    MyBatis3: There is no getter for property named 'code' in 'class java.lang.String'
    jQuery获取Select选择的Text和 Value(转)
    mybatis3 :insert返回插入的主键(selectKey)
    【转】Mybatis/Ibatis,数据库操作的返回值
    Android问题-打开DelphiXE8与DelphiXE10编译空工程提示“[Exec Error] The command exited with code 1.”
    Android问题-打开DelphiXE8与DelphiXE10新建一个空工程提示"out of memory"
    BAT-使用BAT生成快捷方式
    给 TTreeView 添加复选框
    跨进程发送消息数据
    鼠标拖动虚影效果
  • 原文地址:https://www.cnblogs.com/davidgu/p/1567635.html
Copyright © 2020-2023  润新知