首頁  >  文章  >  運維  >  詳解Windows 8 開發之測試程式碼的使用教學課程

詳解Windows 8 開發之測試程式碼的使用教學課程

零下一度
零下一度原創
2017-05-24 15:00:511732瀏覽

本篇文章介紹了Windows 8 開發之測試程式碼的使用方法。需要的朋友參考下

1.創建解決方案和單元測試項目
  1).“文件”選單上選擇“新建”,然後選擇「新建項目」。
  2).在「新專案」對話方塊中,展開「已安裝」、「Visual C#”,選擇「Windows Store」。然後從項目模板清單中選擇“空白應用程式”。
  3).將專案命名為 MyTestProject,並確保選取「建立解決方案的目錄」。
  4).在解決方案資源管理器中,選擇解決方案名稱,從快捷選單中選擇“新增”,然後選擇“新建專案”。
  5).在“新建專案”對話方塊中,展開“已安裝”、“Visual C#”,然後選擇“Windows 應用程式商店”。然後從專案範本清單中選擇「單元測試庫(Windows Store 應用程式)」。

注意:是先建立一個項目,然後再在這個專案中加入測試項目,這樣符合我們在開發中需要對我們的專案進行測試的需求。

  6).在 Visual Studio 編輯器中開啟 UnitTest1.cs。

程式碼如下:

namespace UnitTestLibraryTest{    [TestClass]    public class UnitTest1    {            [TestMethod]        public void TestMethod1()        {</p>
<p>        }    }}

注意以下事項:

a.每個測試都是使用 [TestMethod] 定義的。測試方法必須傳回 void,不能具有任何參數。在類別名稱前一行,加上[TestClass]的宣告.

b.測試方法必須位於使用 [TestMethod] 特性修飾的類別中。執行測試時,將為每個測試類別建立一個實例。將按未指定順序呼叫測試方法。

c.您可定義在每個模組、每個類別或每個方法前後呼叫的特定方法。

d.在檔案頭加入using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;的參考。

  7).測試前的初始化及測試後的清理。用法及程式碼如下:

程式碼如下:

namespace UnitTestLibraryTest
{
    [TestClass]
    public class UnitTest1
    {
        private int a;
        private int b;</p>
<p>        // 当前测试类运行第一个测试方法之前执行,类似于
构造函数
        [ClassInitialize]
        public 
static
 void MyClassInit(TestContext context)
        {
        }
        // 所有测试方法运行完毕后执行,类似于
析构函数
        [ClassCleanup]
        public static void MyClass
End
()
        { 
        }</p>
<p>        //每个测试方法运行之前执行
        [TestInitialize]
        public void Init()
        {
            a = 1;
            b = 1;
        }
        //每个测试方法运行之后执行
        [TestCleanup]
        public void End()
        {
            a = 0;
            b = 0;
        }</p>
<p>    }
}

注意:以上方法,方法名稱可以自訂,無回傳值,除了[ClassInitialize]的那個函數有個TestContext的參數外,其他無參數。

2.驗證測試是否在測試管理資源器中執行

  1).在UnitTest1.cs 檔案的TestMethod1 中插入一些測試程式碼:

#程式碼如下:

[TestMethod]
        public void AddTestMethod()
        {
            int a = 1;
            int b = 2;
            int sum = a+b;
            Assert.AreEqual(3,sum);
        }


注意,Assert 類別提供的若干靜態方法可用來驗證測試方法的結果。

  2).在“測試”功能表上,選擇“運行”,然後選擇“全部運行”。
  將會產生並執行測試項目。隨即顯示“測試資源管理器”窗口,並且測試列出在“已通過的測試”下。視窗底部的「摘要」窗格將提供有關所選測試的其他詳細資訊。
 

3.在「解決方案資源管理器」中,選擇「MyTestProject」專案名稱。從快捷選單中選擇“新增”,然後選擇“類別”。   2).將類別檔案命名為 Rooter.cs。

  3).將以下程式碼加入 Rooter 類別 Rooter.cs 檔案:



程式碼如下:

public class Rooter
    {
        public Rooter()
        { 
        }
        public double SquareRoot(double x)
        {
            
return
 0.0;
        }
    }

 Rooter 類別宣告一個建構函式和 SqareRoot estimator 方法。

  4).SqareRoot 方法只是一個最小實現,足以為測試設定測試基本結構。

4.將測試項目合併為應用程式項目

  1).將對 "MyTestProject"應用程式的參考新增至 UnitTestLibraryTest專案中。

  2).向 UnitTest1.cs 檔案新增 using 語句:

  a.開啟 UnitTest1.cs。

  b.在 using Microsoft.VisualStudio.TestPlatform.UnitTestFramework; 行下新增程式碼:using MyTestProject;

#  3).新增使用 Rooter 函數的測試。將下列程式碼加入 UnitTest1.cs:

#程式碼如下:

[TestMethod]
        public void BasicTest()
        {
            Rooter rooter = 
new
 Rooter();
            double expected = 0.0;
            double actual = rooter.SquareRoot(expected * expected);
            double tolerance = .001;
            Assert.AreEqual(expected, actual, tolerance);
        }

  4).產生解決方案。

  新測試將顯示在測試資源管理器的「未執行的測試」節點中。

  5).在測試資源管理器中,選擇「全部執行」。 已通過基本測試

  您已設定測試和程式碼項目,並驗證了您可在程式碼專案中執行運行函數的測試。現在您可開始編寫真實測試和程式碼。

5.以迭代方式增加測試並使這些測試通過。

  1).新增測試:

程式碼如下:

[TestMethod]
        public void 
Range
Test()
        {
            Rooter rooter = new Rooter();
            for (double v = 1e-6; v < 1e6; v = v * 3.2)
            {
                double expected = v;
                double actual = rooter.SquareRoot(v * v);
                double tolerance = ToleranceHelper(v);
                Assert.AreEqual(expected, actual, tolerance);
            }
        }</p>
<p>        private double ToleranceHelper(double expected)
        {
            return expected / 3.2; 
        }

   提示:建议您不要更改已通过的测试。而是添加新测试,更新代码以便测试通过,然后添加其他测试等。 当您的用户更改其要求时,请禁用不再正确的测试。编写新测试并使它们以相同的增量方式一次运行一个。 

2).在测试资源管理器中,选择“全部运行”。

3).测试将不会通过。 RangeTest 未通过

提示:编写测试后,立即验证每个测试是否都将失败。这帮助您避免易犯的错误,不会编写从不失败的测试。  

  4).增强受测代码,以便新测试通过。将 Rooter.cs 中的 SqareRoot 函数更改为:

代码如下:

public double SquareRoot(double x)
        {
            double estimate = x;
            double d
if
f = x;
            
while
 (diff > estimate / 1000)
            {
                double 
prev
iousEstimate = estimate;
                estimate = estimate - (estimate * estimate - x) / (2 * estimate);
                diff = Math.Abs(previousEstimate - estimate);
            }
            return estimate;
        }

  5).生成解决方案,然后在测试资源管理器中,选择“全部运行”。

  现在所有三个测试都将通过。

  提示:通过添加测试的方式一次性开发代码。确保所有测试在每次迭代后都通过。

6.调用未通过的测试

  1).向 UnitTest1.cs 添加另一个测试: 

代码如下:

[TestMethod]        public void NegativeRangeTest()        {            string message;            Rooter rooter = new Rooter();            for (double v = -0.1; v > -3.0; v = v - 0.5)            {                try                {                    // Should raise an exception:                    double actual = rooter.SquareRoot(v);</p>
<p>                    message = String.Format("No exception for input {0}", v);                    Assert.Fail(message);                }                catch (ArgumentOutOfRangeException ex)                {                    continue; // Correct exception.                }                catch (Exception e)                {                    message = String.Format("Incorrect exception for {0}", v);                    Assert.Fail(message);                }            }        }

  2).在测试资源管理器中,选择“全部运行”。

  测试将不会通过。在测试资源管理器中选择测试名称。将突出显示失败的断言。失败消息将在测试资源管理器的细节窗格中可见。NegativeRangeTests 未通过。

   3).若要查看测试未通过的原因,请单步执行以下函数:

  a.在 SquareRoot 函数的开头设置断点。

  b.在未通过测试的快捷菜单上,选择“调试选定的测试”。 当运行在断点处停止时,请单步执行以下代码。

  c.向 Rooter 方法添加代码以捕获异常,将SquareRoot方法修改如下(对x进行判断捕获异常):

代码如下:

public double SquareRoot(double x)
        {
            if (x < 0.0)
            {
                throw new ArgumentOutOfRangeException();
            }
            double estimate = x;
            double diff = x;
            while (diff > estimate / 1000)
            {
                double previousEstimate = estimate;
                estimate = estimate - (estimate * estimate - x) / (2 * estimate);
                diff = Math.Abs(previousEstimate - estimate);
            }
            return estimate;
        }

  在测试资源管理器中,选择“全部运行”以测试已纠正的方法,并确保您未引入回归测试。所有测试都将通过。

【相关推荐】

1. Windows7下的Java开发环境搭建步骤(图解)

2. Windows系统下安装Ulipad编辑器

3. 使用Python开发windows桌面程序

4. 教你如何在Windows环境下安装python2和python3两个版本

以上是詳解Windows 8 開發之測試程式碼的使用教學課程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn