什么是单元测试一些流行的命名约定? [关闭] 什么是单元测试一些流行的命名约定? [关闭](W

2019-05-12 15:22发布

一般

  • 遵守适用于所有的测试同样的标准。
  • 要明确各测试状态是什么。
  • 要具体说明预期的行为。

例子

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 ()

其他

  • 测试结束的方法名
  • 开始与类名方法名

Answer 1:

我几乎与你在这一个男人。 您使用的命名约定是:

  • 明确每个测试状态是什么。
  • 具体的关于预期的行为。

你从测试名需要什么呢?

相反, 雷人的答案 ,我不认为测试前缀是必要的。 这是测试代码,我们知道这一点。 如果你需要这样做来识别代码,那么你有更大的问题, 你的测试代码不应该与你的产品代码混淆。

至于长度和使用下划线,它的测试代码 ,到底谁在乎呢? 只有你和你的团队会看到它,只要它是可读的,和什么测试是做清楚,矣! :)

尽管如此,我仍然很新的测试,并用它写博客我的故事 :)



Answer 2:

这也是值得一读: 构造单元测试

结构已每类测试类被测试。 这不是如此不同寻常。 但是,什么是不寻常的,以我的是他所测试的每方法的嵌套类。

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

因为每个测试都已经在嵌套类



Answer 3:

我倾向于使用的约定MethodName_DoesWhat_WhenTheseConditions因此,例如:

Sum_ThrowsException_WhenNegativeNumberAs1stParam

不过,我确实看到许多是使测试名称遵循的单元测试结构

  • 安排
  • 法案
  • 断言

这也遵循了BDD /小黄瓜语法:

  • 特定
  • 什么时候
  • 然后

这将是命名的方式测试: UnderTheseTestConditions_WhenIDoThis_ThenIGetThis

所以你的例子:

WhenNegativeNumberAs1stParam_Sum_ThrowsAnException

不过,我更喜欢把方法的名字被第一个测试,因为那么测试可以按字母顺序排列,或出现在VisStudio成员下拉框中按字母顺序排序,并全部为1种方法测试组合在一起。


在任何情况下,我喜欢用下划线分隔测试名称的主要部分 ,而不是每一个 ,因为我觉得它可以更容易阅读,并得到整个测试的关键。

换句话说,我想: Sum_ThrowsException_WhenNegativeNumberAs1stParam优于Sum_Throws_Exception_When_Negative_Number_As_1st_Param



Answer 4:

我使用“PascalCasing”没有任何下划线或分隔的名字我的测试方法,如其他方法。 我离开后缀测试的方法进行,因为它没有任何价值。 该方法是一个试验方法是由属性TestMethod的指示。

[TestMethod]
public void CanCountAllItems() {
  // Test the total count of items in collection.
}

由于每个测试类应该只测试一个其他类我离开类的名称该方法的名字。 包含测试方法的类的名字被命名为喜欢下与后缀为“测试”测试的类。

[TestClass]
public class SuperCollectionTests(){
    // Any test methods that test the class SuperCollection
}

对于测试的例外或者是不可能的动作的方法,我用的前缀词不能测试方法。

[TestMethod]
[ExpectedException(typeOf(ArgumentException))]
public void CannotAddSameObjectAgain() {
  // Cannot add the same object again to the collection.
}

我命名convension是对文章的基础“的TDD提示:测试命名规则及指引”布莱恩·库克。 我发现这篇文章非常有帮助。



Answer 5:

第一组的名称是更具可读性给我,因为驼峰规则分开文字和下划线分开命名方案的组成部分。

我还往往包含“测试”的地方,无论是在功能名称或封闭命名空间或类。



Answer 6:

只要你遵循一个惯例,它其实并不重要。 一般来说,我写覆盖所有的方法(I有简单的方法)的变化的方法的单个单元测试,然后写测试更复杂的集为需要它的方法。 我的命名结构是因此通常测试(从JUnit 3中一个故障保持)。



Answer 7:

我使用的是“T”字头为测试命名空间,类和方法。

我尽量整齐,并创建复制的命名空间的文件夹,然后创建测试一个测试文件夹或单独的项目和复制生产结构的基本测试:

AProj
   Objects
      AnObj
         AProp
   Misc
      Functions
         AFunc
   Tests
      TObjects
         TAnObj
            TAnObjsAreEqualUnderCondition
      TMisc
         TFunctions
            TFuncBehavesUnderCondition

我可以很容易看到的东西是一个测试,我知道到底是什么原代码它涉及到,(如果你不能工作了这一点,那么这个测试就太令人费解反正)。

它看起来就像接口命名约定,(我的意思是,你不要混淆与以“我”的东西,你也不会用“T”)。

这很容易只是使用或不使用测试编译。

它在理论上是不错,无论如何,和非常有效的小项目。



文章来源: What are some popular naming conventions for Unit Tests? [closed]