C# 单元测试的文件范围
我有一个类C# 单元测试的文件范围,c#,unit-testing,C#,Unit Testing,我有一个类Stats,里面有一些方法。比如: public int getamountoftimesplayerlogedin(字符串playerName) public int getHighestScoreInLeague(字符串联盟名称) public int-getTopPlayers(字符串leagueName,int-topfresults) 当我为这个类创建单元测试时,我是否必须为这个类中的每个方法创建一个单独的.cs文件 因为我很难命名我的单元测试方法。我喜欢WhenXXX\u
Stats
,里面有一些方法。比如:
public int getamountoftimesplayerlogedin(字符串playerName)
public int getHighestScoreInLeague(字符串联盟名称)
public int-getTopPlayers(字符串leagueName,int-topfresults)
当我为这个类创建单元测试时,我是否必须为这个类中的每个方法创建一个单独的.cs
文件
因为我很难命名我的单元测试方法。我喜欢WhenXXX\u ThenYYY命名约定。但是如果我有一个.cs
文件,它涵盖了Stats
的所有方法测试,那么您如何真正知道它正在测试什么方法呢
我的意思是,假设我想测试getTopPlayers
。然后我将创建一个测试方法,如:
WhenLeageNameIsTest\u Expect20
但是,您如何通过查看该名称来判断测试了什么方法。。?可以是getHighestScoreInLeague
或getTopPlayers
那么,我是否应该在一个单独的.cs
文件中分离方法的每个测试?或者我应该改变我的命名约定,或者其他什么
编辑
我刚想到这一点。在一个测试方法中进行多个断言可以吗
但是你怎么能通过看这个名字来判断测试的是什么方法呢。。。我应该改变我的命名约定吗
一个流行的惯例是在表单中命名您的测试方法
MethodUnderTest_Scenario_Expectation()
对你来说,如果使用这个表格
public void getHighestScoreInLeague_LeagueNameIsTest_Returns20()
这也是Roy Osherove在年推荐的一种形式。它可以让你一目了然,知道什么是正在测试和什么是预期的。你的名字在大多数情况下都是这样的,添加方法名以保持清晰
通常建议每个测试类有一个测试文件。如果您有很多正在测试的方法,并且有很多很多测试来涵盖这些方法的行为,那么这可能是一个评估您的设计的机会。你们班做得太多了吗?这并不是说答案马上就是“是的”,这只是一个可能需要考虑片刻的想法。当你把你的类放在一个单一的职责上时,你的测试(和测试文件)自然也会变小
我刚想到这一点。在一个测试方法中进行多个断言可以吗
理想情况下,答案是否定的。您希望测试失败的原因只有一个。当您有多个断言时,您有多个失败原因。如果早期断言失败,则后续断言不会运行。尽可能隔离您的资产
您的单元测试应该从山顶尖叫出具体的场景和期望(通过名称)以及出错的地方(通过单个断言)。您不需要启动调试器来找出单元测试失败的地方,尽管这并非总是可以避免的
但是你怎么能通过看这个名字来判断测试的是什么方法呢。。。我应该改变我的命名约定吗
一个流行的惯例是在表单中命名您的测试方法
MethodUnderTest_Scenario_Expectation()
对你来说,如果使用这个表格
public void getHighestScoreInLeague_LeagueNameIsTest_Returns20()
这也是Roy Osherove在年推荐的一种形式。它可以让你一目了然,知道什么是正在测试和什么是预期的。你的名字在大多数情况下都是这样的,添加方法名以保持清晰
通常建议每个测试类有一个测试文件。如果您有很多正在测试的方法,并且有很多很多测试来涵盖这些方法的行为,那么这可能是一个评估您的设计的机会。你们班做得太多了吗?这并不是说答案马上就是“是的”,这只是一个可能需要考虑片刻的想法。当你把你的类放在一个单一的职责上时,你的测试(和测试文件)自然也会变小
我刚想到这一点。在一个测试方法中进行多个断言可以吗
理想情况下,答案是否定的。您希望测试失败的原因只有一个。当您有多个断言时,您有多个失败原因。如果早期断言失败,则后续断言不会运行。尽可能隔离您的资产
您的单元测试应该从山顶尖叫出具体的场景和期望(通过名称)以及出错的地方(通过单个断言)。您不必启动调试器来找出单元测试失败的地方,尽管这并非总是可以避免的。这里介绍了一种很好的结构:
基本上,SUT中的每个方法在fixture中都有自己的嵌套类,那么该方法的每个测试都是testmethod。当它们组合在一起时,几乎可以作为一个句子来阅读,例如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
}
}
}
这里描述了一个很好的结构:
基本上,SUT中的每个方法在fixture中都有自己的嵌套类,那么该方法的每个测试都是testmethod。当它们组合在一起时,几乎可以作为一个句子来阅读,例如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
}
}
}
您对多个资产的编辑是一个单独的问题,以前曾被问过(您对多个资产的编辑是一个单独的问题,以前被问过)(我可以将该类的所有测试放在同一个.cs
文件中吗?或者您建议将每个方法的测试分开吗?我的测试方法中可以有多个断言吗?(请参见编辑)更新了我的答案。但一般来说,是的,将其保存在一个文件中,否,避免多个断言。我可以将该类的所有测试放在同一个.cs
文件中吗?或者您建议将每个方法的测试分开吗?我的测试方法中可以有多个断言吗?(请参见编辑)更新了我的答案。但一般来说,是的,保留在一个文件中,不是的,避免多个asser