XUnit MethodName_Condition_Behaviour 重构保护

XUnit MethodName_Condition_Behaviour refactoring protection

在单元测试中通常使用约定:

MethodName_Condition_Behaviour()

现在,如果出于任何原因我尝试重构方法“MethodName”,我会得到该方法的不一致测试名称。

为了处理这个问题,我想到了这个方法:

步骤 1

扩展 XUnit Fact 属性并使用接受输入的构造函数以及测试名称的方法

public class FactForAttribute : FactAttribute
{
   public FactForAttribute(string methodName = "Constructor", [CallerMemberName] string testMethodName = "")
        => DisplayName = $"{methodName}_{testMethodName}";
}

步骤2

使用 nameof 运算符使重构成为可能:

public class A
{
    public int Just2() => 2;
}

public class ATests
{
    [FactFor(nameof(A.Just2))]
    public void Should_Return2()
    {
        var a = new A();
        a.Just2().Should().Be(2);
    }
}

现在是问题。我从来没有在任何地方找到这种方法,所以我怀疑这是最好的方法。

有什么特别的原因使这种方法不可取吗? 有任何最佳实践来防止使用此约定进行重构吗?

出于可读性原因。

编码人员希望第一眼就能准确地看到正在谈论的单元测试,而无需进行跟踪。特别是因为这个实现几乎没有增加可维护性价值。

(但说句公道话,如果允许的话,我就是那种会这样做的程序员:D)