仕様のための Glimmer DSL - 仕様第一のエンジニアリング
Ruby の非常に表現力豊かな性質にもかかわらず、Ruby で記述されたほとんどのテスト ツールキットは必須であり (例:
Glimmer DSL for Specification は、シンプルで最小限の名詞ベースの宣言構文を提供することを目的としています.もう動詞はありません!命令ではなく宣言的に考える時が来ました!
そのため、ソフトウェア エンジニアは Requirements Specification レベルの Use Case に注目し、各ユース ケースは複数のシナリオで構成されています.シナリオのステップを指定する必要はありません.コードはステップです!!!
また、検証ステートメントで比較を行うための追加の DSL 構造は必要ありません.単純な古い Ruby を使用するだけで、残りはライブラリーに理解させてください!
例えば:
それは、
もう一つの例:
これは、最終的な検証を示すシナリオの最後のステートメントに加えて、いくつかの追加の事実を示しています.ソフトウェア検証コードでさえ基本的なRubyで書かれているので、ソフトウェアエンジニアはもう嫌いな厄介な検証コードを書く必要はありません(例えば、アサートや期待).
String の等値/不等値の比較でファクトが失敗すると、ライブラリは比較された 2 つの String オブジェクトの値を自動的に出力します.
Glimmer DSL for Specification は、Specification-First Engineering の考え方を強調しています.ライブラリは、それ自体を利用する仕様優先で作成されました.実際、それを証明するために glimmer-dsl-specification の初期仕様がここにあります.
ライブラリは非常に新しく実験的なものであるため、コースが大幅に変更される可能性があることに注意してください.また、大胆な野心的な声明にもかかわらず、ライブラリを改善するためにあなたのフィードバックが光を当てるのに役立つ明らかな盲点があるかもしれません.そのため、アイデアや提案は大歓迎です.
assert
または expect
を使用)、したがって表現力が失われ、ソフトウェア エンジニアが間違ったことに集中するか、Ruby 以外のコード (例: キュウリとガーキン) が Ruby と混合されます.したがって、Ruby の単純さを逃しています.Glimmer DSL for Specification は、シンプルで最小限の名詞ベースの宣言構文を提供することを目的としています.もう動詞はありません!命令ではなく宣言的に考える時が来ました!
そのため、ソフトウェア エンジニアは Requirements Specification レベルの Use Case に注目し、各ユース ケースは複数のシナリオで構成されています.シナリオのステップを指定する必要はありません.コードはステップです!!!
また、検証ステートメントで比較を行うための追加の DSL 構造は必要ありません.単純な古い Ruby を使用するだけで、残りはライブラリーに理解させてください!
例えば:
scenario 'Same-content strings are equal' do
'string' == 'string'
end
それは、
assert
または expect
を必要とせずに全体の話をしています.比較を実行するための単純な Ruby コードが含まれているだけです.もう一つの例:
scenario 'person name consists of first name and last name' do
person = Person.new(first_name: 'Bob', last_name: 'Winfrey')
fact { person.first_name == 'Bob' }
fact { person.last_name == 'Winfrey' }
person.name == 'Bob Winfrey'
end
これは、最終的な検証を示すシナリオの最後のステートメントに加えて、いくつかの追加の事実を示しています.ソフトウェア検証コードでさえ基本的なRubyで書かれているので、ソフトウェアエンジニアはもう嫌いな厄介な検証コードを書く必要はありません(例えば、アサートや期待).
String の等値/不等値の比較でファクトが失敗すると、ライブラリは比較された 2 つの String オブジェクトの値を自動的に出力します.
Glimmer DSL for Specification は、Specification-First Engineering の考え方を強調しています.ライブラリは、それ自体を利用する仕様優先で作成されました.実際、それを証明するために glimmer-dsl-specification の初期仕様がここにあります.
# From: https://github.com/AndyObtiva/glimmer-dsl-specification
require 'glimmer-dsl-specification'
class Person
attr_reader :first_name, :last_name
def initialize(first_name: , last_name: )
@first_name = first_name
@last_name = last_name
end
def name
"#{first_name} #{last_name}"
end
end
module Glimmer::Specification
specification('Glimmer DSL for Specification') {
use_case('Compare Two Objects for Equality') {
scenario 'Same-content strings are equal' do
'string' == 'string'
end
scenario 'Different-content strings are not equal' do
'string1' != 'string2'
end
scenario 'Same-number integers are equal' do
1 == 1
end
scenario 'Different-number integers are not equal' do
1 != 2
end
}
use_case('Verify Multiple Facts') {
scenario 'person name consists of first name and last name' do
person = Person.new(first_name: 'Bob', last_name: 'Winfrey')
fact { person.first_name == 'Bob' }
fact { person.last_name == 'Winfrey' }
person.name == 'Bob Winfrey'
end
}
}
end
ライブラリは非常に新しく実験的なものであるため、コースが大幅に変更される可能性があることに注意してください.また、大胆な野心的な声明にもかかわらず、ライブラリを改善するためにあなたのフィードバックが光を当てるのに役立つ明らかな盲点があるかもしれません.そのため、アイデアや提案は大歓迎です.
Reference
この問題について(仕様のための Glimmer DSL - 仕様第一のエンジニアリング), 我々は、より多くの情報をここで見つけました https://dev.to/andyobtiva/glimmer-dsl-for-specification-specification-first-engineering-3giiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol