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)
在单元测试中通常使用约定:
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)