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/

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

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

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

2 测试无返回值方法

public static void Add()
{
   Console.WriteLine("Test");
}

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

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

public static int Add(int a, int b)
{
   return a + b;
}

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

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对象,第二个参数是枚举类型。当选择此方法之后,参数窗体中如下所示。

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

关闭此窗体,回到主窗体,再输入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,执行之后结果输出窗口显示

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

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

6 重复N次调用测试方式

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

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

7 .NET Reflector 插件

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

插件下载地址: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不需要写代码,只需要借助于它的参数生成工具,填写参数值即可执行静态方法或属性的测试。

.NET 程序集单元测试工具 SmokeTest 应用指南的更多相关文章

  1. 单元测试工具 SmokeTest

    .NET 程序集单元测试工具 SmokeTest Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试.一般地我们使用脚本来实现Smoke ...

  2. PHP单元测试工具PHPUnit初体验

    今天接到了个任务,需要对数字进行计算,因为涉及到整数,小数,和科学计数法等很多条件,所以人工测试非常麻烦,于是想到了PHP的单元测试工具PHPUnit,所以写个文档备查. 看了PHPUnit的文档之后 ...

  3. 主流的单元测试工具之-JAVA新特性-Annotation 写作者:组长 梁伟龙

    1:什么是Annotation?Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一 ...

  4. Chrome开发者工具不完全指南(六、插件篇)

    本篇是Chrome开发者工具的结尾篇,最后为大家介绍几款功能强大的插件.在chrome商店里面有很多插件,没事建议大家去逛逛.不过需要FQ,所以诸位请自备神器.一.皮肤插件 首先是大家期盼已久,翘首以 ...

  5. codeblocks+Mingw 下配置开源c++单元测试工具 google test

    google test 是google的c++开源单元测试工具,chrome的开发团队就是使用它. Code::Blocks 12.11(MinGW 4.7.1) (Windows版)Google T ...

  6. Chrome开发者工具不完全指南

    Chrome开发者工具不完全指南(一.基础功能篇) Chrome开发者工具不完全指南(二.进阶篇) Chrome开发者工具不完全指南:(三.性能篇) Chrome开发者工具不完全指南(四.性能进阶篇) ...

  7. C# 版dll 程序集合并工具

    C# 版dll 程序集合并工具 最近要开发一个控件给同事用,开发中会引用一些第三方DLL,这样交给用户很不方便,希望的效果是直接交付一个DLL文件.网上找了一些资料. 1.       使用 Cost ...

  8. 单元测试工具之Xunit

    在.NET开发中的单元测试工具之——xUnit.Net  原始出处 http://zhoufoxcn.blog.51cto.com/792419/1172320 在上一篇<在.NET开发中的单元 ...

  9. Java单元测试工具:JUnit4(一)(二)(三)(四)

    Java单元测试工具:JUnit4(一)--概述及简单例子 Java单元测试工具:JUnit4(二)--JUnit使用详解 Java单元测试工具:JUnit4(三)--JUnit详解之运行流程及常用注 ...

随机推荐

  1. 01.SQLServer性能优化之----强大的文件组----分盘存储

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...

  2. 理解CSS外边距margin

    前面的话   margin是盒模型几个属性中一个非常特殊的属性.简单举几个例子:只有margin不显示当前元素背景,只有margin可以设置为负值,margin和宽高支持auto,以及margin具有 ...

  3. Linux scp 设置nohup后台运行

    Linux scp 设置nohup后台运行 1.正常执行scp命令 2.输入ctrl + z 暂停任务 3.bg将其放入后台 4.disown -h 将这个作业忽略HUP信号 5.测试会话中断,任务继 ...

  4. 从零开始编写自己的C#框架(27)——什么是开发框架

    前言 做为一个程序员,在开发的过程中会发现,有框架同无框架,做起事来是完全不同的概念,关系到开发的效率.程序的健壮.性能.团队协作.后续功能维护.扩展......等方方面面的事情.很多朋友在学习搭建自 ...

  5. C#中将DataTable导出为HTML的方法

    今天我要向大家分享一种将DataTable导出为到HTML格式的方法.有时我们需要HTML格式的输出数据, 以下代码就可以帮助我们达到目的,. 首先,我们要绑定DataTable和 DataGridV ...

  6. 破解SQLServer for Linux预览版的3.5GB内存限制 (RHEL篇)

    微软发布了SQLServer for Linux,但是安装竟然需要3.5GB内存,这让大部分云主机用户都没办法尝试这个新东西 这篇我将讲解如何破解这个内存限制 要看关键的可以直接跳到第6步,只需要替换 ...

  7. CSS知识总结(八)

    CSS常用样式 8.变形样式 改变元素的大小,透明,旋转角度,扭曲度等. transform : none | <transform-function> <transform-fun ...

  8. Effective前端2:优化html标签

    div { float: left; } .keyboard > div + div { margin-left: 8px; } --> div{display:table-cell;ve ...

  9. HTTP API接口安全设计

    HTTP API接口安全设计 API接口调用方式 HTTP + 请求签名机制   HTTP + 参数签名机制 HTTPS + 访问令牌机制 有没有更好的方案? OAuth授权机制 OAuth2.0服务 ...

  10. 【JS基础】循环

    for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...