Windows 8 開發之測試代碼的使用

來源:互聯網
上載者:User

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()        {        }    }}

注意以下事項:

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;        // 當前測試類別運行第一個測試方法之前執行,類似於建構函式        [ClassInitialize]        public static void MyClassInit(TestContext context)        {         }        // 所有測試方法運行完畢後執行,類似於解構函式        [ClassCleanup]        public static void MyClassEnd()        {         }        //每個測試方法運行之前執行        [TestInitialize]        public void Init()        {            a = 1;            b = 1;        }        //每個測試方法運行之後執行        [TestCleanup]        public void End()        {            a = 0;            b = 0;        }    }}

注意:以上方法,方法名可以自訂,無傳回值,除了[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項目添加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 RangeTest()        {            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);            }        }        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 diff = x;            while (diff > estimate / 1000)            {                double previousEstimate = 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);                    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;        }

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.