簡體   English   中英

單元測試的文件范圍

[英]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

但是,如何通過查看該名稱來告訴您要測試的方法呢? 可以是getHighestScoreInLeaguegetTopPlayers

所以我應該在一個單獨的.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM