我最近想出了以下约定来命名测试,它们的类和包含项目,以便最大程度地描述它们:
可以说我正在测试名称空间中Settings
项目中的类MyApp.Serialization
。
首先,我将使用MyApp.Serialization.Tests
名称空间创建一个测试项目。
在这个项目中,当然在命名空间中,我将创建一个名为IfSettings
(保存为IfSettings.cs)的类。
可以说我正在测试该SaveStrings()
方法。->我将命名测试CanSaveStrings()
。
当我运行此测试时,它将显示以下标题:
MyApp.Serialization.Tests.IfSettings.CanSaveStrings
我认为这很好地告诉了我,它正在测试什么。
当然,在英语中名词“ Tests”与动词“ tests”相同是有用的。
在命名测试时,您的创造力没有限制,因此我们可以为它们获得完整的句子标题。
通常,测试名称必须以动词开头。
示例包括:
- 检测(例如
DetectsInvalidUserInput
)
- 抛出(例如
ThrowsOnNotFound
)
- 会(例如
WillCloseTheDatabaseAfterTheTransaction
)
等等
另一种选择是使用“ that”代替“ if”。
后者可以节省我的击键次数,并且可以更准确地描述我在做什么,因为我不知道存在已测试的行为,但正在测试是否存在。
[ 编辑 ]
在使用上述命名约定一段时间之后,我发现在使用接口时,If前缀可能会造成混淆。碰巧的是,测试类IfSerializer.cs看起来与“打开文件”选项卡中的接口ISerializer.cs非常相似。在测试,要测试的类及其接口之间来回切换时,这可能会很烦人。结果我现在会选择这比如果作为前缀。
另外,我现在只在测试类中使用方法(因为在其他任何地方都不被视为最佳实践),因此使用“ _”来分隔测试方法名称中的单词,如下所示:
[Test] public void detects_invalid_User_Input()
我发现这更容易阅读。
[ 结束编辑 ]
我希望这能产生更多的想法,因为我认为命名测试非常重要,因为它可以为您节省大量时间,否则这些时间会花在尝试理解测试的功能上(例如,在长时间的中断后恢复项目) 。