• 单元测试工具 SmokeTest


    .NET 程序集单元测试工具 SmokeTest

    Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试。一般地我们使用脚本来实现Smoke Test的自动化,可借用虚拟机的snapshot机制来保证干净的环境来进行Smoke Test,然后将测试好的程序集成到Continous build或daily build中。 
    冒烟测试是指一种基本功能测试,是从硬件测试借鉴过来的。进行硬件测试时,首先需要给硬件加电,如果一加电电路烧了冒烟,后续的测试当然进行不去了,也就是能加电是后面测试的前提条件。借鉴到软件中来就是只有软件的基本功能正确的情况下,后续的开发和测试才能进行。冒烟测试一般和每日构建一起实施。

     

    今天要向读者推荐的工具名称叫SmokeTest,是.NET领域中一个程序集测试工具,是以程序集为单元的测试工具。

     

    官方对SmokeTest的介绍如下:

     

    SmokeTest lets you invoke any member of a class interactively. An indispensable tool for anyone involved in developing, testing, and managing Windows .NET projects.

     

    地址如下:http://smoketest.wesleysteiner.com/

     

    image

     

    SmokeTest可以让我们测试一个程序集中的方法,而不用写任何代码。使用这个工具,我们可以创建对象的实体(调用构造方法),调用方法,获取或设置属性,并操作调用的结果。

     

    • Create an instance of any Class  创建对象实体(调用构造方法) 
    • Call any Method 调用方法 
    • Get and set any Property  获取属性值或设置属性值 
    • Read and write any Field  读取或设置字段值 
    • Create and edit object instances to pass as arguments 创建并编辑对象实体,并将它传递到方法的参数中 
    • Drill-down and smoke-test the returned result 钻取返回结果集

     

    一个可测试的类型(smoke-testable)必须是值类型(ValueType)或引用类型(class),不支持泛型类或接口的测试。

     

    1 测试.NET DateTime 类型方法和属性

     

    在左边的树型结构中,浏览到mscrolib的System命名空间下点击DateTime结点,点击Properties中的DateTime.Now

     

    image

     

    看到右下的黄色窗体输出系统的当前时间。

     

    再转到Methods方法选项卡中测试IsLeapYear,输入参数2016,点Call按钮后看到右下脚结果窗体中输出true。

     

    image

     

    2 测试无返回值方法

     

    public static void Add()
    

     

    {
    

     

       Console.WriteLine("Test");
    

     

    }

     

    输出窗体返回(null),表示无返回值。

     

    3 测试两个整数相加的方法

     

    public static int Add(int a, int b)
    

     

    {
    

     

       return a + b;
    

     

    }

     

    我们在参数栏中输入参数1,2,看到输出窗体返回结果3。

     

    image

     

    4 方法的参数是对象类型

     

    public static int ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText)
    

     

    {
    

     

        //pass through the call providing null for the set of SqlParameters
    

     

        return ExecuteNonQuery(connection, commandType, commandText, (SqlParameter[])null);
    

     

    }

     

    我们的第一个参数是SqlConnection对象,第二个参数是枚举类型。当选择此方法之后,参数窗体中如下所示。

     

    image

     

    点击第一个参数SqlConnection后面的按钮,打开窗体选择有参数的构造方法,填写连接字符串信息点击Create按钮

     

    image

     

    关闭此窗体,回到主窗体,再输入comandText参数表示的SQL语句

     

    SELECT COMPANY_NAME FROM dbo.GBPARM

     

    点Call按钮后看到结果输出窗体显示数据库中的返回值。

     

    从这一步中看到,SmokeTest具备参数实例化能力,它可以向参数传递值来创建参数的实例,从而完成被测试方法的参数值传递。

     

    5 方法的返回结果是集合类型或对象类型

     

    public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText)
    

     

    {
    

     

       //pass through the call providing null for the set of SqlParameters
    

     

       return ExecuteDataset(connection, commandType, commandText, (SqlParameter[])null);
    

     

    }

     

    这个方法的返回类型是DataSet,执行之后结果输出窗口显示

     

    image

     

    点击右边的DataSet按钮,我们可以对ExecuteDataSet方法的返回值进行操作。按照下图中的字母顺序,依次点击,可可观察到3号窗体(中间窗体)返回结果为1,这正是调用上面的SQL语句返回的数据集DataSet的Table的数量。

     

    image

     

    如果DataSet按钮可以以可视化的方式(DataGridView控件)显示数据就更完善了。

     

    6 重复N次调用测试方式

     

    注意上面的Call按钮后面有个x 1下拉选项,里面1-1000000选项。默认点x1表示调用测试方法一次,如果选择其它数值,则可以调用测试方式N次。目前有以下几个选项值:

     

    image

     

    在下面的下拉框中会记录每次调用的调用耗费的时间,调用次序。

     

    7 .NET Reflector 插件

     

    SmokeTest的作者还为它设计了.NET Reflector插件,借助于.NET Reflector设计精良的程序集浏览能力,边查看源代码,边测试方法。

     

    image

     

    插件下载地址:http://smoketest.wesleysteiner.com/smoketest_raddin_1_0.zip

     

    8 NUnit, MS Test ,TestDriven.NET,SmokeTest

     

    前二种需要编写程序代码,是.NET单元测试领域的主要工具。

     

    //NUnit
    

     

    [TestFixture]
    

     

    public class UserTest
    

     

    {
    

     

       [Test]
    

     

       public void LoginTest()
    

     

       {
    

     

           User user = SessionManaer.Login("admin","cnblogs");
    

     

           Assert.IsTrue(user!=null);
    

     

        }
    

     

    }
    

     

    //MSTest
    

     

    [TestClass]
    

     

    public class UserTest
    

     

    {
    

     

       [TestMethod]
    

     

       public void LoginTest()
    

     

       {
    

     

           User user = SessionManaer.Login("admin","cnblogs");
    

     

           Assert.IsTrue(user!=null);
    

     

        }
    

     

    }
    

     

    TestDriven.NET是建立在NUnit或MSTest技术基础上的一个扩展工具,支持在任何方法、类、源文件、命名空间、工程中直接单击即可运行测试。

     

     

    注意TestDriven.NET测试的方法不一定需要Test或TestMethod特性(attribute),您只需要在一个方法内部点击Test按钮,即可完成代码的测试。

     

    SmokeTest则是以.NET程序集为基础的代码测试工具,使用SmokeTest不需要写代码,只需要借助于它的参数生成工具,填写参数值即可执行静态方法或属性的测试。

  • 相关阅读:
    30 个最好的jQuery表单插件
    Jquery Tools——不可错过的Jquery UI库(三)
    RedHat Linux AS5安装Oracle 10g 及常见问题
    老婆一直在你身旁,写给咱们的孩子
    又一篇关于中航信的文章
    Java自定义异常
    php文件复制升级
    PHP文件复制
    hdu 2428
    hdu 1358 KMP的应用
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5551710.html
Copyright © 2020-2023  润新知