c# - 如何将 Specflow 步骤标记为 'Obsolete' 以支持渐进式、向后兼容的重构

标签 c# refactoring bdd specflow

由于业务术语中的一些术语发生变化,我目前正在重构一个中型应用程序。我们有大约 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/

相关文章:

c# - 如何在 C# 中获取应用程序的安装日期

javascript - 如果 Nodejs 模块将一个对象导出到其他两个模块,那么一个下游模块中对该对象所做的更改是否会传播到另一个模块?

c# - 重构方法的最佳实践

cucumber - 您如何通过声明式验收测试捕获需求?

c# - ClickOnce如何设置图标

C# 与 C 默认枚举值

c# - coderush 下划线错误

c++ - 这对于用循环重构来说太具体了吗?

ruby-on-rails - 使用 Rspec stub 链式方法

python - 如何在行为 (BDD) 中查看 print() 语句