由于业务术语中的一些术语发生变化,我目前正在重构一个中型应用程序。我们有大约 121 个 SpecFlow 功能文件需要更改。
我喜欢如何在 C# 中“弃用”API,首先作为警告:
[Obsolete("Use MyClass.NewMethod instead")]
public void OldMethod() { }
然后编译器错误:
[Obsolete("Use MyClass.NewMethod instead", true)]
public void OldMethod() { }
如果 SpecFlow 步骤具有此类功能,那就太好了:
[When("I old foo", Obsolete = true)]
[When("I new foo")]
public void WhenIFoo() { }
是否有任何方法可以将 SpecFlow 中的步骤标记为过时,以便其他开发人员知道需要在其功能文件中更改这些步骤,但不会阻止他们编写和运行测试?另外,是否有办法选择性地导致编译器或测试运行失败?
最佳答案
以 version v2.4 开头,SpecFlow 尊重[Obsolete]
步骤绑定(bind)上的属性。
对于您的示例,您可能会这样使用它:
[When("I old foo")]
[Obsolete("you should use WhenIFoo instead")]
public void WhenIOldFoo() { }
[When("I new foo")]
public void WhenIFoo() { }
作为使用此类步骤的默认行为,会发出警告。利用obsoleteBehavior
SpecFlow 的 <runtime>
上的属性配置,您可以更改它,尤其是。测试执行失败:
<specFlow>
...
<runtime obsoleteBehavior="Error" />
</specFlow>
同时Wiki-page for the Configuration已更新以记录该功能。
关于c# - 如何将 Specflow 步骤标记为 'Obsolete' 以支持渐进式、向后兼容的重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45020338/