[英]File scope of a Unit Test
我有一個帶有一些方法的Stats
類。 喜歡:
public int getAmountOfTimesAPlayerLogedIn(string playerName)
public int getHighestScoreInLeague ( string leagueName )
public int getTopPlayers ( string leagueName, int topResults )
當我為此類創建單元測試時,是否需要為此類中的每個方法創建一個單獨的.cs
文件?
因為我很難命名我的單元測試方法。 我喜歡WhenXXX_ThenYYY
命名約定。 但是,如果我有一個.cs
文件涵蓋Stats
所有方法測試,那么您如何真正知道它正在測試哪種方法?
我的意思是,假設我想測試getTopPlayers
。 然后,我將創建一個測試方法,例如:
WhenLeageNameIsTest_Expect20
但是,如何通過查看該名稱來告訴您要測試的方法呢? 可以是getHighestScoreInLeague
或getTopPlayers
。
所以我應該在一個單獨的.cs
文件中將每個測試的方法分開嗎? 還是應該更改我的命名約定,還是其他?
這只是發生在我身上。 可以在一種測試方法中進行多個Asserts
嗎?
但是,如何通過查看該名稱來告訴您要測試哪種方法呢? ...我應該更改命名約定嗎?
一種流行的約定是以以下形式命名測試方法
MethodUnderTest_Scenario_Expectation()
對您來說,如果使用該表格,它將是
public void getHighestScoreInLeague_LeagueNameIsTest_Returns20()
這也是Roy Osherove在“單元測試的藝術”中建議的形式。 它使您一眼就能知道正在測試什么和期望什么。 大部分情況下都使用您的名稱,為缺少的清晰度添加方法名稱。
通常建議每個被測類有一個測試文件。 如果您要測試的方法很多,並且涉及到這些方法的行為的測試很多,那么也許這是評估您的設計的機會。 你的課做得太多嗎? 這並不是說答案立即是“是”,這只是一個想法,可能需要考慮一下。 當您使班級只專注於單一職責時,您的測試(和測試文件)自然也會變小。
這只是發生在我身上。 可以在一種測試方法中進行多個斷言嗎?
理想情況下,不會。 您希望測試僅出於一個原因而失敗。 當您有多個斷言時,您有多個失敗原因。 並且,如果是早期斷言失敗,則后續斷言不會運行。 盡可能斷言。
您的單元測試應該從山頂尖叫特定的場景和期望(通過名稱)以及出了什么問題(通過單個Assert)。 盡管並非總是可以避免的,但您不必一定要啟動調試器來找出單元測試失敗的地方。
這里描述了一個不錯的結構: http : //haacked.com/archive/2012/01/01/structuring-unit-tests.aspx
基本上,SUT中的每個方法在夾具中都有其自己的嵌套類,然后對該方法的每個測試都是一個測試方法。 合並后,它們幾乎像一個句子一樣閱讀,例如TheTitleizerMethod.ReturnsDefaultTitleForNullName()
。 來自鏈接的代碼示例:
public class TitleizerFacts
{
public class TheTitleizerMethod
{
[Fact]
public void ReturnsDefaultTitleForNullName()
{
// Test code
}
[Fact]
public void AppendsTitleToName()
{
// Test code
}
}
public class TheKnightifyMethod
{
[Fact]
public void ReturnsDefaultTitleForNullName()
{
// Test code
}
[Fact]
public void AppendsSirToMaleNames()
{
// Test code
}
[Fact]
public void AppendsDameToFemaleNames()
{
// Test code
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.