1

私はビヘイビア駆動開発に不慣れであり、現在の問題に対応する例やガイドラインを見つけることができません。

私の現在のプロジェクトには、個別のセルのそれぞれに任意の数のスロットがある大規模な3Dグリッドが含まれます。これらのスロットに格納されているエンティティには独自のスロットがあるため、エンティティの任意のネストが存在する可能性があります。使用されるオブジェクトの最終的な実装は、ある種の永続データストアによってサポートされる必要があります。これにより、APIが少し複雑になります(つまり、get/setの代わりにload/storeのような単語を使用し、返されたアイテムを変更しないようにします。データストア自体の対応するアイテムを変更します)。心配しないでください。私の最初の実装は単にメモリ内に存在しますが、APIは動作を定義することになっているものなので、実際の実装は今のところ重要ではありません。

私がこだわっているのは、BDDの文献がオブジェクト間の相互作用に焦点を当てているという事実と、モックオブジェクトがそれをどのように支援できるかということです。ここではまったく当てはまらないようです。私の抽象データストアの唯一の実際の「動作」には、プログラミング言語自体によって表されるエンティティ以外のエンティティからのデータのロードと保存が含まれます。これらの動作は実装に依存しているため、定義またはテストすることはできません。

では、何を定義/テストできますか?自然な選択肢は状態です。何かを保存します。ロードされていることを確認してください。ロードしたものを変更し、リロードした後、変更されていないことを確認します。などですが、これは新しいBDD開発者にとってよくある落とし穴であるという印象を受けているので、それを回避するためのより良い方法があるかどうか疑問に思っています。

私が州のテストルートをとる場合、他のいくつかの質問が発生します。明らかに、最初に空のグリッドをテストし、次に1つの場所で空のエンティティをテストできますが、次に何をしますか?異なる場所にある2つのエンティティ?同じ場所にある2つのエンティティ?ネストされたエンティティ?ネスティングをどのくらい深くテストする必要がありますか?これらの非排他的なケースのデカルト積をテストしますか?つまり、同じ場所にある2つのエンティティと、それぞれネストされたエンティティを使用しますか?リストは永遠に続き、どこで止めればいいのかわかりません。

4

1 に答える 1

1

TDD と BDD の違いは言語に関するものです。具体的には、BDD は関数/オブジェクト/システムの動作に焦点を当てて、設計とテストの可読性を向上させます。

多くの場合、動作について考えるとき、オブジェクトの相互作用とコラボレーションの観点から考えるため、単体テスト用のモックが必要になります。ただし、グリッドの状態を変更することが適切である場合、オブジェクトの動作に問題はありません。状態またはモック ベースのテストは、TDD/BDD で同様に使用できます。

ただし、複雑なデータ構造をテストするには、Matchers (Java の Hamcrest など) を使用して、関心のある状態の部分のみをテストする必要があります。また、複雑なデータを共同作業するオブジェクトに分解できるかどうかも検討する必要があります (ただし、Java の Hamcrest など)。それがアルゴリズム/設計の観点から理にかなっている場合)。

于 2012-05-25T13:31:03.123 に答える