單元測試工具Nunit基本用法
1. 單元測試Unit Test : 開發 者編寫的一小段代碼,用于檢驗被測代碼的一個很小的,很明確的功能是否正確。 2. 單元測試 的具體表現:用于判斷某個特定條件或場景下某個特定函數或方法的行為。 3. 單元測試的目的:為了證明某段代碼的行為確實和開發者所期望
1. 單元測試Unit
Test:
開發者編寫的一小段代碼,用于檢驗被測代碼的一個很小的,很明確的功能是否正確。
2.
單元測試的具體表現:用于判斷某個特定條件或場景下某個特定函數或方法的行為。
3. 單元測試的目的:為了證明某段代碼的行為確實和開發者所期望的一致。
4. 單元測試的核心內涵:這個簡單有效的
技術就是為了令代碼變得更加完美。
5. NUint中的斷言Assert類的靜態方法:
1)AreEquals
Assert.AreEqual(expected, actual[, string message])
//expected:期望值(通常是硬編碼的);
//actual:被測試代碼實際產生的值;
//message:一個可選消息,將會在發生錯誤時報告這個消息。 因計算機并不能精確地表示所有的浮點數,所以在比較浮點數時(float或double),需要指定一個額外的誤差參數。
Assert.AreEqual(expected, actual, tolerance[, string message])
//tolerance:指定的誤差,即只要精確到小數點后X位就足夠了。
//例如:精確到小數點后4位
Assert.AreEqual(0.6667, 0.0/3.0, 0.0001);2)IsNull
Assert.IsNull(object[, string message])
//是null
Assert.IsNotNull(object[, string message])
//非null3)AreSame
Assert.AreSame(expected, actual[, string message])
//驗證expected和actual兩個參數是否引用一個相同的對象。

4)IsTrue
Assert.IsTrue(bool condition [, string message])
Assert.IsFalse(bool condition [, string message])5)Fail
Assert.Fail([string message])
//使測試立即失??;這種斷言通常被用于標記某個不應該被到達的分支,但實際中不常用。 6. 當有測試失敗時,無論如何都不能給原有代碼添加任何的新特性。
7. NUnit的框架
使用NUint框架的最小要求
1
using NUint.Framework;
2
[TestFixture]
3
public class TestSimple
4

{
5
[Test]
6
public void TestMethod()
7
{
8
Assert.AreEqual(2, 4/2);
9
}
10
}
1)需要NUint.Framework的命名空間,項目中需要引用NUint.dll;
2)每個包含測試的類都必須帶TestFixture屬性標記,且這個類必須是public的。
3)測試類包含的所有帶Test屬性標記的public方法都會被NUint自動執行。
8.NUint的分類Categories
用Category的概念提供了標記和運行一個個單獨的測試和TestFixture的簡單方法。
一個Category是自己定義的一個名字??砂巡煌臏y試方法關聯到一個或多個Category,然后運行測試的時候選擇自己想要運行的Category。
如,實際中有些測試只需幾秒就能完成,而有些則須長時間才能完成,為了避免每次都執行長時間的測試,可使用分類來標記它們,然后運行測試指定需要運行的Category。
1
[Test]
2
[Category("Short")]
3
public void ShortTest()
4

{
5
//do some tests.
6
}
7
[Test, Category("Long")] //兩種屬性的寫法就可以
8
public void LondTest()
9

{
10
//do some tests.
11
} 同樣,有時需要:當沒有明確選擇任何Category時,希望某些Category的測試能夠被運行;而當顯示選擇一些Category時,則只有被選擇的Category才會被執行。
則需在Category屬性的Explicit設置為真。
如:
[Category("Special", Explicit=true)] 在運行GUI中沒有指定任何Category情況下,上述設置會使該Category不會被運行測試。
默認情況下,即一個方法沒有指定任何Category時,相當于沒有顯示指定Explicit(即Explicit=false),這類方法都會被執行。
除方法可設置Category,連TestFixture都可以設置Category,如,對于一些整個TestFixture都測試時間都很長的,就可將它設置為[Category"Long")],這樣就沒有必要重復標記每個測試方法了。
9.每個測試的運行都應該是互相獨立的;可在任何時候,任意順序運行每個單獨的測試。
10.NUint中Per-method :Setup與Teardown
[SetUp] //用于測試環境的建立

public void MySetup()
{
//do something.
}

[TearDown] //清除測試環境

public void MyTeardown()
{
//do something.
} 在每個[Test]方法之前,都會調用[SetUp]方法;并在每個[Test]方法完成之后,都會調用[TearDown]方法。
11.NUint中的Per-class:TestFixtureSetUp和TestFixtureTearDown
這兩個方法對整個Test Class設置一些環境,及所有測試方法都執行完后做一些清理
工作。
當第一個[Test]方法運行前,會調用[TestFixtureSetUp]方法,當所有[Test]方法都執行后,會調用[TestFixtureTearDown]方法。
12.測試預期的異常
//如測試是否拋出ArgumentException
[Test, ExpectedException(typeof(ArgumentException))]
public void TestForException()


{
Do.GetSomething(null);
//Shouldn's get to here;
}若測試方法預期地拋出ArgumentException異常,測試將會通過;若沒有拋出異常,則測試將會失敗。
一旦異常拋出了,測試方法中剩余的代碼都不會被執行。
13. 忽略指定的測試方法
[Test, Ignore("Not run this method")]
public void TestMethod()


{
//do something
}
原文轉自:http://www.kjueaiud.com