.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不需要寫代碼,只需要借助於它的參數生成工具,填寫參數值即可執行靜態方法或屬性的測試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM