你學會測試了嗎 2 測試語法之屬性介紹

2021-07-04 10:36:18 字數 4019 閱讀 8071

這個簡短的系列一一講解一下.net下測試的相關知識,希望對初學者有所幫助。

testdriven.net支援多種單元測試框架,像nunit,mbunit,ms team system,這裡我選擇了最為經典的nunit單元測試框架來介紹testdriven.net所支援的一些重要的屬性。testdriven.net其實已經支援大部分nunit的屬性,但是有些屬性現在還不支援。

在我們使用testdriven.net測試前,專案必須引用框架的程式集,即nunit.framework.dll,並且在每個包含測試的原始檔中必須使用using語句引用該程式集,像這樣:using nunit.framework; 在nunit中,所有的屬性都包含在nunit.framework命名空間裡。

首先我們依次熟悉一下這些屬性。

這個屬性用來修飾測試類,表示這個類包含了測試方法。注意一下使用這個屬性修飾類有一些限制:這個類必須是public,必須有乙個預設的建構函式。

using system;

using nunit.framework;

namespace testdrivennet

}

這個屬性標記類的某一方法為乙個測試方法,此類已經標記為乙個testfixture。乙個測試方法的簽名定義如下:

[test]

public void testmethod()

注意這個方法必須沒有引數。如果程式設計師將測試方法標記為不正確的簽名,它不會執行。

這個屬性用來修飾方法,修飾後這個方法在每個測試方法被呼叫之前執行的,我們可以用它來重新設定一些變數,在每個方法執行之前賦值。

[setup]

public void init()

這個屬性用來修飾方法,說明這個方法是在每個測試方法被呼叫完之後執行的,我們可以用來釋放一些暫存的變數。

[teardown]

public void dispose()

這個屬性這個屬性用來修飾類,這個類包含了setupattribute或者teardownattribute屬性,必須是public和乙個預設的建構函式。只要使用這個屬性,在其命名空間下,執行測試則首先執行其中setupattribute修飾的方法,在執行測試結束則執行其中teardownattribute修飾的方法。注意乙個命名空間下只有乙個setupfixtureattribute,如果這個屬性在整個程式集下定義,則在整個程式集下有效。我們常常用它來設定全域性的條件。

[setupfixture]

public class

mysetupclass

[teardown]

public void runafteranytests()

}

這個屬性用來修飾方法,修飾後這個方法在fixture任何測試執行之前執行,我們常常用來初始化一些物件等,類似於類中的建構函式。

[testfixturesetup]

public void fixtureinit()

這個屬性用來修飾方法,修飾後這個方法在fixture任何測試執行之後執行,我們常常用來釋放一些資源。

[testfixtureteardown]

public void fixturedispose()

使用這個屬性表明這個方法會丟擲乙個預期的異常。用這種方法來指出這個測試執行時會丟擲的異常。type,為期望的異常的精確型別。 第二個是乙個期望的異常全名的字串。 不管是哪一種,在執行測試時,如果它丟擲了指定的異常,那麼測試通過。如果丟擲乙個不同的異常,測試就失敗。如果丟擲了乙個由期望異常繼承而來的異常,這也是成功的。

[test]

[expectedexception(typeof(invalidoperationexception))]

public void expectanexceptionbytype()

[test]

[expectedexception("system.invalidoperationexception")]

public void expectanexceptionbyname()

平台屬性用於指定測試方法測試方法或測試fixture執行的平台。平台選擇包括了各種作業系統和.net framework版本。使用無大小寫之分的字串來指定平台,也通過使用include或exclude屬性包含或排除執行的平台。也可以指定platformattribute引數。不管是哪一種情況,都可以用多個逗號分隔字串。

testfixture語法

[testfixture]

[platform("net-2.0")]

public class

yjingleefixture

test語法

[test]

[platform(exclude = "winxp")]

public void sometest()

平台指定值:win系列、unix、linux、 net、net-1.0、net-1.1、net-2.0、netcf等。它們可以平台指定值:win系列、unix、linux、 net、net-1.0、net-1.1、net-2.0、netcf等。它們可以為大寫,小寫或者混合的。

這個屬性可以將某些測試方法或測試fixture指定為屬於某個特定的分類。當使用分類時,僅選擇的類別可以測試。沒有選擇的類別測試是不會執行的。 例如我們有些測試需要執行很長的時間,肯定不希望每次都去執行它。你就可以把這些測試歸到某個類別中,然後在nunit的gui中將它排除在測試範圍之外。注意這個屬性在testdriven.net中不支援。

testfixture語法

[testfixture]

[category("longrunning")]

public class

yjingleefixture

test語法

[test]

[category("verylong")]

public void verylongtest()

這個屬性會忽略乙個測試方法或測試fixture,直到它被顯式的選擇執行。如果你指定了它(比如你把滑鼠放在這個方法上,然後選擇runtest)這個測試方法就會執行。我們常常用於暫時避免的測試方法。

testfixture語法

[testfixture,explicit]

public class

yjingleefixture

test語法

[test, explicit]

public void explicittest()

suite屬性用來定義基於使用者偏好的集合。在測試中不常用,因為框架提供了動態建立機制。

這個屬性表明這個測試方法或測試fixture會被忽略掉。一段時間內不會執行這個方法或測試fixture。我們可以將測試方法或fixture標記為ignore屬性,執行測試時,就不會執行。 例如我們常常使用這個屬性標記暫時不執行測試或者重構軟體時需要保留的測試來代替使用注釋或重新命名的方法,這樣做,測試**會和有這個標記的**一起編譯,在執行時不會執行標記的測試**,這樣保證不會忘記過去測試。

testfixture語法

[testfixture]

[ignore("ignore a fixture")]

public class

yjingleefixture

test語法

[test]

[ignore("ignore a test")]

public void ignoredtest()

在testdriven.net中,如果使用這個屬性,測試顯示結果如下:

好了,有關nunit單元測試框架的屬性就介紹這麼多了,testdriven.net測試工具支援了這裡大多數屬性,我們完全可以使用這個工具完成我們的測試工作。下篇我繼續為大家介紹斷言的基本語法,接下來以乙個例項實戰一下測試技巧。

你學會測試了嗎 1 推薦工具

乙個典型的軟體專案中最為重要的兩種測試型別,即程式設計師和使用者的測試,稱為 單元測試 和 驗收測試 在開發任何種類的企業或大型應用時都不容忽視,如果沒有合適的工具作為支援,單元測試工作量非常巨大了。測試驅動開發 test driven development,tdd 技術是在新增新 之前讓你的測試...

你學會測試了嗎 1 推薦工具

乙個典型的軟體專案中最為重要的兩種測試型別,即程式設計師和使用者的測試,稱為 單元測試 和 驗收測試 在開發任何種類的企業或大型應用時都不容忽視,如果沒有合適的工具作為支援,單元測試工作量非常巨大了。測試驅動開發 test driven development,tdd 技術是在新增新 之前讓你的測試...

Spring Mock測試你用上了嗎?

在真實的測試當中,並不能所有的邏輯都可以自己控制,因此有了mock測試。今天就結合場景來講一下怎麼做mock測試。適合物件 初次嘗試整合和使用mockito進行單元測試的開發同學這裡選擇的是mockito powermockito。為什麼會整合powermockito,是因為有個想要mock的方法是...