ScalaDBTest と呼ばれる scala の dbunit を置き換える実用的な文法を作成しました。プログラム全体が動作します - 書くのに 2 日しかかかりませんでした。やるべきことがたくさんあります。
とにかく、DSL がデータベースにデータを入力するために使用している文法は順応性があり、それについてのフィードバックが欲しいです。
基本的な構文は次のようになります。それはとても簡単です:
country:
- country_id: 1, name: "Canada"
- country_id: 2, name: "United States"
これは、XML や SQL の挿入ステートメントよりも確実に優れています。
「:」や「=」を使って議論しました。前者の方が見栄えが良いですが、後者は自動的に入力できるようです。
レコードに「ラベルを付ける」という概念もあります。ある意味で、上記の構文は匿名レコードでした。ラベルはさまざまな方法で使用できるため、興味深い機能になります。
country:
record: Canada -> country_id: 1, name: $label # produces "Canada"
record: UnitedStates -> country_id: 2, name: $label.uncamel # produces "United States"
私はこの構文が嫌いです。ちょっと二言です。「-」を使用するのは正しくないように見えますが、「record」のような実際のコマンド ワードを使用する場合は、「->」を使用してそれらを区切る必要があります。
$label は単にラベルを繰り返すだけなので、文字列を再利用する方法として最小限のラベルを使用できます。$label.uncamel は、キャメルケースのように見える場所にスペースを追加します。
ラベルの背後にある考え方は、API が ID を覚えなくてもレコードにアクセスできるようにすることです。取得したい国オブジェクトが「カナダ」であることがわかっている場合は、ラベル「カナダ」を渡すだけで、それが一意の ID に変換され、データベースから取り出されます。
デフォルトのパラメータを指定できる例を次に示します。
province:
? country_id: 1, nice_weather: true
- province_id: 1, name: "British Columbia"
- province_id: 2, name: "Manitoba", nice_weather: false
- province_id: 3, name: "New York", country_id: 2
ここで、本当の力を見ました。これら 3 つの「都道府県」レコードはすべて、4 つの列を持ちます。2 つの州はカナダからのものであるため、デフォルト値から自動的に継承されます。3 番目のケースでは、New York の United States で上書きします。必要に応じて組み合わせることができます。
実際には、実際にはいくつかの値しか気にしないことが多いため、これにより入力と認知負荷が大幅に節約され、残りは、必要なフィールドの欠落などについてデータベースを黙らせるための単なるプレースホルダーになる可能性があります。これは、ポリモーフィック オブジェクトのテストにも非常に役立ちます。
ここに別のものがあります:
article:
? date_create: $now
- article_id: 1, title: "The Fed Sucks"
- article_id: 2, title: null
このスニペットは、dbUnit のようなトリックを行わずに実際に null 値を配置できることを示しています。DbUnit では、カスタム文字列 ("[NULL]" など) を実際の null 値に変換するトランスフォーマーを最初に作成する必要があります。
実際、私たちはより表現力に富み、さまざまな表現や関数を提供してデータの生成を支援することができます。たとえば、$now は、今日の日付/時刻の適切にフォーマットされた SQL 日付を返します。これらの種類の機能を拡張して、テスト データの作成を容易にします。
とにかく、構文を本当にきれいにするための助けを探しています。いくらでも変えられるし、これは新鮮なので、あとで変えるよりも、最初からカッコいいものにしたいと思っています。
ありがとう