フィーチャと一対一なステップ定義(アンチパターン)
原文 : Feature Coupled Step Definitions (Antipattern)
フィーチャと一対一なステップ定義はフィーチャやシナリオをまたいで使うことのできないステップ定義です。 これは、ステップ定義の急増やコードの重複、そしてメンテナンスが大変になるため有害です。
例
架空の履歴書アプリに以下のステップがあります:
1
2
3
4
5
6
7
8
features/
+--edit_work_experience.feature
+--edit_languages.feature
+--edit_education.feature
+--steps/
+--edit_work_experience_steps.rb
+--edit_languages_steps.rb
+--edit_education_steps.rb
edit_work_experience.feature
に次のようなシナリオがあります:
1
2
3
4
5
シナリオ: 説明を追加する
前提 履歴書があり、説明の編集ページを表示している
かつ "説明" に "Cucumber BDD tool" と記入する
もし "保存" を押す
ならば "説明" に "Cucumber BDD tool" と表示されていること
edit_work_experience_steps.rb
が次のように実装されています:
1
2
3
4
5
前提 /履歴書があり、説明の編集ページを表示している/ do
@employee = Employee.create!(:name => 'Sally')
@employee.create_cv
visits("/employees/#{@employee.id}/descriptions/new")
end
修正方法
- ステップをドメインコンセプト毎にまとめます。ステップのまとめ方を見てください。
- step.rb ファイルを(フィーチャやシナリオに関連した名前ではなく)ドメインに関連した名前に変更します。
- 結合したステップ(アンチパターン)を独立したステップに分解します。