詳解Windows 8 開發之測試代碼的使用教程

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

1.創建解決方案和單元測試項目
  1).“文件”菜單上選擇“新建”,然后選擇“新建項目”。
  2).在“新建項目”對話框中,展開“已單元測試”、“Visual 單元測試”,選擇“Windows Store”。然后從項目模板列表中選擇“空白應用程序”。
  3).將項目命名為 MyTestProject,并確保選中“創建解決方案的目錄”。
  4).在解決方案資源管理器中,選擇解決方案名稱,從快捷菜單中選擇“添加”,然后選擇“新建項目”。
  5).在“新建項目”對話框中,展開“已安裝”、“Visual C#”,然后選擇“Windows 應用商店”。然后從項目模板列表中選擇“單元測試庫(Windows Store 應用程序)”。

詳解Windows 8 開發之測試代碼的使用教程

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

  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>????????//?當前測試類運行第一個測試方法之前執行,類似于  構造函數  ????????[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>????}  }</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).在“測試”菜單上,選擇“運行”,然后選擇“全部運行”。
  將生成并運行測試項目。隨即顯示“測試資源管理器”窗口,并且測試列出在“已通過的測試”下。窗口底部的“單元測試”窗格將提供有關所選測試的其他詳細信息。
 詳解Windows 8 開發之測試代碼的使用教程

3.向MyTestProject項目添加Rooter類

  1).在“解決方案資源管理器”中,選擇“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?  <p>????????private?double?ToleranceHelper(double?expected)  ????????{  ????????????return?expected?/?3.2;?  ????????}</p>

?? 提示:建議您不要更改已通過的測試。而是添加新測試,單元測試代碼以便測試通過,然后添加其他測試等。 當您的用戶更改其要求時,請禁用不再正確的測試。編寫新測試并使它們以相同的增量方式一次運行一個。?

2).在測試資源管理器中,選擇“全部運行”。

3).測試將不會通過。 RangeTest 未通過

詳解Windows 8 開發之測試代碼的使用教程

提示:編寫測試后,立即驗證每個測試是否都將失敗。這幫助您避免易犯的錯誤,不會編寫從不失敗的測試。??

  4).增強受測代碼,以便新測試通過。將 Rooter.cs 中的 SqareRoot 函數更改為:

代碼如下:

public?double?SquareRoot(double?x)  ????????{  ????????????double?estimate?=?x;  ????????????double?d  if  f?=?x;  ????????????  while  ?(diff?&gt;?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?&gt;?-3.0;?v?=?v?-?0.5)????????????{????????????????try????????????????{????????????????????//?Should?raise?an?exception:????????????????????double?actual?=?rooter.SquareRoot(v);  <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);????????????????}????????????}????????}</p>

  2).在測試資源管理器中,選擇“全部運行”。

  測試將不會通過。在測試資源管理器中選擇測試名稱。將突出顯示失敗的斷言。失敗消息將在測試資源管理器的細節窗格中可見。NegativeRangeTests 未通過。

?  3).若要查看測試未通過的原因,請單步執行以下函數:

  a.在 SquareRoot 函數的開頭設置斷點。

  b.在未通過測試的快捷菜單上,選擇“單元測試選定的測試”。 當運行在斷點處停止時,請單步執行以下代碼。

  c.向 Rooter 方法添加代碼以捕獲異常,將SquareRoot方法修改如下(對x進行判斷捕獲異常):

代碼如下:

public?double?SquareRoot(double?x)  ????????{  ????????????if?(x??estimate?/?1000)  ????????????{  ????????????????double?previousEstimate?=?estimate;  ????????????????estimate?=?estimate?-?(estimate?*?estimate?-?x)?/?(2?*?estimate);  ????????????????diff?=?Math.Abs(previousEstimate?-?estimate);  ????????????}  ????????????return?estimate;  ????????}

  在測試資源管理器中,選擇“全部運行”以測試已糾正的方法,并確保您未引入回歸測試。所有測試都將通過。

【相關推薦】

1.?單元測試

2.?單元測試

3.?單元測試

4.?單元測試

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享