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