首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

8.5  使用存储在内存中的测试用例数据

问题

如何使用存储在内存中的测试用例数据,而不是使用像文本文件或SQL表这样的外部存储。

设计

创建一个类作用域范围内的ArrayList对象,并使用Add()方法插入测试用例数据。通过foreach或for循环遍历这个ArrayList对象。

方案

class Class1

{

  static ArrayList testcases = new ArrayList();

  static void Main(string[] args)

  {

    try

    {

      Console.WriteLine("\nBegin test run\n");

      testcases.Add("001:GetTitles:testing:3:Theory");

      testcases.Add("002:GetTitles:and:1:Theory");

      testcases.Add("003:GetTitles:better:1:Build");

      testcases.Add("004:GetTitles:Algorithms:1:Algorithms");

      foreach (string testcase in testcases) // 主测试循环

      {

        string[] tokens = testcase.Split(':');

        string id = tokens[0];

        string method = tokens[1];

        string input = tokens[2];

        int expectedCount = int.Parse(tokens[3]);

        string hint = tokens[4];

        // 调用待测方法

            // 比较实际结果与期望结果

            // 显示或存储测试结果

      }

    }

    catch(Exception ex)

    {

      Console.WriteLine("Fatal error: " + ex.Message);

    }

  }

}

对于轻量级的自动化测试,通常来说外部测试用例存储(以文本文件、XML文件、SQL数据库等形式)比内部存储要好一些。外部测试用例数据可以被不同的测试套件所共享并且易于编辑。但是使用内存中的测试用例数据也有它的优点;把测试用例数据嵌入测试套件,维护起来更容易。把测试用例存储在内存中,最简单的办法是使用一个ArrayList对象。当测试用例个数不多的时候(通常来说,少于100个)或者你想把测试套件作为一个单独的可执行文件供DRT(Developer Regression Test)或BVT(Build Verification Test)使用时,这种方法尤为适用。

注解

如果不使用ArrayList对象来存储测试用例,也可以使用array对象。如果使用array,上面的方案就会变成:

class Class1

{

  static string[] testcases =

    new string[] { "001:GetTitles:testing:3:Theory",

                      "002:GetTitles:and:1:Theory",

                      "003:GetTitles:better:1:Build"

                    };

  static void Main(string[] args)

  {

    try

    {

      Console.WriteLine("\nBegin test run\n");

      for (int i = 0; i < testcases.Length; ++i) // 主测试循环

      {

        string[] tokens = testcases[i].Split(':');

        string id = tokens[0];

        string method = tokens[1];

        string input = tokens[2];

        int expectedCount = int.Parse(tokens[3]);

        string hint = tokens[4];

         // 调用待测方法

            // 比较实际结果与期望结果

            // 显示或存储测试结果

      }

    }

    catch(Exception ex)

    {

      Console.WriteLine("Fatal error: " + ex.Message);

    }

  }

}

这种方法给人一种旧的、.NET之前的程序所给人的感觉,但是它基本上与使用ArrayList是等效的。从理论上来说,使用array对象要比ArrayList有更好的运行效率,但是只有当测试用例数据非常多的时候,才有可能体现出来,而如果测试用例非常之多,那可能原本就不该把测试用例存储在内存中。

如果不使用ArrayList对象,还可以使用Queue对象把测试用例数据存储在内存中。使用Queue对象的方案如下:

class Class1

{

  static Queue testcases = new Queue();

  static void Main(string[] args)

  {

    try

    {

      testcases.Enqueue("001:GetTitles:testing:3:Theory");

      testcases.Enqueue("002:GetTitles:and:1:Theory");

      testcases.Enqueue("003:GetTitles:better:1:Build");

      while (testcases.Count > 0)

      {

        string testcase = (string)testcases.Dequeue();

        string[] tokens = testcase.Split(':');

        string id = tokens[0];

        string method = tokens[1];

        string input = tokens[2];

        int expectedCount = int.Parse(tokens[3]);

        string hint = tokens[4];

        // 调用待测方法

            // 比较实际结果与期望结果

            // 显示或存储测试结果

      }

    }

    catch(Exception ex)

    {

      Console.WriteLine("Fatal error: " + ex.Message);

    }

  }

}

选择哪一种数据结构(ArrayList、array、Queue)用来存储测试用例,从技术上来说并没有多大区别。使用ArrayList或array对象可以对测试用例进行随机访问,因为可以通过索引值取出某个特定的测试用例。使用ArrayList或Queue对象,则可以通过ArayList.Add()或Queue.Enqueue()方法在程序中添加测试用例数据。但是,大多数时候,具体选择哪一个是根据个人对编程风格的喜好而定的。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论