繁体   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