一般
所有测试都遵循相同的标准。
清楚每个测试状态是什么。
明确预期的行为。
例子
1) MethodName_StateUnderTest_ExpectedBehavior
Public void Sum_NegativeNumberAs1stParam_ExceptionThrown()
Public void Sum_NegativeNumberAs2ndParam_ExceptionThrown ()
Public void Sum_simpleValues_Calculated ()
来源:单元测试的命名标准
2)用下划线分隔每个单词
Public void Sum_Negative_Number_As_1st_Param_Exception_Thrown()
Public void Sum_Negative_Number_As_2nd_Param_Exception_Thrown ()
Public void Sum_Simple_Values_Calculated ()
其他
用Test结束方法名
用类名开始方法名
我确实像其他方法一样命名我的测试方法,使用“pascal套管”,没有任何下划线或分隔符。我省略了方法的后缀Test,因为它没有增加任何值。属性TestMethod表示该方法是一个测试方法。
[TestMethod]
public void CanCountAllItems() {
// Test the total count of items in collection.
}
由于每个Test类应该只测试另一个类,所以我在方法名中去掉了类名。包含测试方法的类的名称与被测试类的名称相同,带有后缀“Tests”。
[TestClass]
public class SuperCollectionTests(){
// Any test methods that test the class SuperCollection
}
对于测试异常或不可能的操作的方法,i在测试方法前加上单词Cannot。
[TestMethod]
[ExpectedException(typeOf(ArgumentException))]
public void CannotAddSameObjectAgain() {
// Cannot add the same object again to the collection.
}
我的命名惯例是基于Bryan Cook的文章“TDD技巧:测试命名惯例和指南”。我发现这篇文章很有帮助。
这也值得一读:结构化单元测试
结构中每个被测试的类都有一个测试类。这并不罕见。但对我来说不同寻常的是,他为每个被测试的方法都有一个嵌套类。
e.g.
using Xunit;
public class TitleizerFacts
{
public class TheTitleizerMethod
{
[Fact]
public void NullName_ReturnsDefaultTitle()
{
// Test code
}
[Fact]
public void Name_AppendsTitle()
{
// Test code
}
}
public class TheKnightifyMethod
{
[Fact]
public void NullName_ReturnsDefaultTitle()
{
// Test code
}
[Fact]
public void MaleNames_AppendsSir()
{
// Test code
}
[Fact]
public void FemaleNames_AppendsDame()
{
// Test code
}
}
}
原因如下:
首先,这是保持测试组织的好方法。所有的
方法的测试(或事实)被分组在一起。例如,如果
你可以使用CTRL+M, CTRL+O快捷键来折叠方法体
轻松地扫描您的测试,并像阅读代码规范一样阅读它们。
我也喜欢这种方法:
MethodName_StateUnderTest_ExpectedBehavior
所以也许要适应:
StateUnderTest_ExpectedBehavior
因为每个测试都已经在一个嵌套类中