c#单元测试-重载方法测试的命名约定

| 我在针对单元测试的c#中有一些简单的扩展方法。一种扩展方法是超载的,因此我很难为单元测试提出一个合理的命名约定。 重载方法示例:
public static class StringExtensions
{
    public static List<string> ToList(this string value, char delimiter)
    {
        return ToList(value, new[] { delimiter });
    }

    public static List<string> ToList(this string value, char[] delimiterSet) { .. }
}
如果我要编写两个单元测试,那么每种方法一个,您将如何命名测试?通常我会简单地使用:
[TestMethod, TestCategory(\"Single Method Tests\")]
public void ToListTest
但是,使用两种同名的方法,我一直在努力寻找一个好的约定。
[TestMethod, TestCategory(\"Single Method Tests\")]
public void ToListTest

[TestMethod, TestCategory(\"Single Method Tests\")]
public void ToListTestOverload
太可怕了
[TestMethod, TestCategory(\"Single Method Tests\")]
public void ToListTestWithChar

[TestMethod, TestCategory(\"Single Method Tests\")]
public void ToListTestWithCharArray
基于参数类型更好,但仍然很糟糕。 有人可能建议写一个针对这两种重载的测试方法,但理想情况下,我希望与单元测试和方法建立1:1关系,即使重载当前是链式的。我不希望在测试中做出任何假设,认为重载是链接和传递的。 您将如何处理?     
已邀请:
Roy Osherove在他的书《单元测试的艺术》中,建议根据您要测试的行为命名约定,而不必在生产方法和测试方法之间进行一对一的映射。因此,作为一个简单的示例,假设我有一个Stack类,如下所示:
public class Stack
{
    public void Push(int value);
    public int Pop();
    public bool IsEmpty();
}
编写测试的一种方法是拥有三种测试方法:
[TestMethod]
public void PushTest

[TestMethod]
public void PopTest

[TestMethod]
public void IsEmptyTest
但是,有一种更好的测试方法可以指定Stack类的行为。然后的想法是,您在类行为和测试方法之间具有一对一的映射。因此,一种行为是在空堆栈上的IsEmpty返回true。另一个是推入一个元素会使堆栈不为空。然后,我将根据以下简单的英语句子,以Arrange / Act / Assert格式编写测试,并以以下格式指定这些行为:
MethodName_StateOfTheObject_ExpectedResult
因此,对于上述行为:
[TestMethod]
IsEmpty_OnEmptyStack_ReturnsTrue

[TestMethod]
Push_OnEmptyStack_MakesStackNotEmpty
我鼓励您考虑尝试在上述方法上进行测试的行为,然后将这些行为映射到测试。例如:
[TestMethod]
ToList_OnEmptyString_ReturnsEmptyList

[TestMethod]
ToList_OnStringWithDelimiters_ReturnsListWithTokensSeparatedByDelemiter

[TestMethod]
ToList_OnStringWithoutDelimiters_ReturnsListWithOneString
更多信息在这里     
我倾向于使用后者,尽管较少基于传入的参数,而是更多基于要测试的实际功能。 所以不是:
TestFunctionWithListOfNumbers
TestFunctionWithListOfStrings
但也许:
TestFunctionWithStudentIDs
TestFunctionWithStudentNames
    
我倾向于用更给定的“何时”,“然后”的方式来编写测试名称。这使测试名称变得冗长,但它告诉我所测试的功能打算做什么。所以在您的情况下,我将进行测试
[TestMethod]
public void GivenSingleCharDelimeter_ToList_Returnsxxx()
[TestMethod]
public void GivenCharArrayDelimeter_ToList_Returnsxxx()
    

要回复问题请先登录注册