在平时开发程序的过程中,自己经常会写一些控制台小程序进行测试某个功能,事后我们会寻找这些小程序, 如果不仔细管理,经常会找不到。 由于每个控制台小程序都有自己独立的 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类名就好了。 以上就是我利用工厂模式实现的自己测试小程序的用例测试工厂。