私が TDD に惹かれる理由の 1 つは、実装と並行して仕様を明確に開発できることです。
構成オブジェクトを受け入れるコンストラクターを実装しようとしています
function MyConstructor(conf) {}
conf
は現在、 と の 2 つのキーを持つように仕様化されています。ここで、はaでa
あり、 であり、私の TDD 仕様解明の野望の一環として、このオブジェクトを次のように仕様化するテストを作成しています。b
a
RegExp
b
Function
- どちらかが a でないか、 a でない場合
MyConstructor
に をスローしたいと思います。Error
a
RegExp
b
Function
MyConstructor
Error
または のいずれa
かが構成にない場合にスローb
します。
Configuration
これで、この動作を他のコンストラクター、たとえば「構成」オブジェクトを作成するコンストラクターにカプセル化できることがわかりました。しかし、私が今これを見ている方法では、この動作がどこで終わるかに関係なく、この動作は、この仕様が TDD を介して作成されるようにどこかにカプセル化する必要があります。
conf
問題は、オブジェクトのキーの数が増えると、テストの数も指数関数的に増加するように私には思えます。これは、特に上記の 2 番目の箇条書きによるものです。
たとえば、 、 、 の 4 つのキーがa
あるb
とc
しd
ます。不足しているキーがある場合はエラーがスローされるようにする必要があります。これには、欠落しているキーのすべての可能性 (組み合わせ!) をカバーする大量の同一の平凡なテストを作成する必要があるようです。それは正しく聞こえません!しかし、すべてのシナリオがカバーされていることを明示的または帰納的にテストする良い方法は思いつきません。何かご意見は?