質問: knownemptybitvector_ 方法1はcountに依存し、方法2はisemptyに依存します(それ自体はcountに依存するため、それを使用しても意味がありません)、方法3は_==_に依存します。いずれにしても、イニシャライザを単独でテストすることはできません。 countのテストは何かを操作する必要があり、それによって必然的にイニシャライザがテストされます isemptyの実装はcountに依存しています _==_の実装はcountに依存しています。 既存のビットパターンからbitvectorを(_uint64_として)構築するプライベートapiを導入することで、この問題を部分的に解決することができました。これにより、他のイニシャライザをテストせずに値を初期化できるため、自分の道を「ブートストラップ」できます。私の単体テストが本当に単体テストであるために、私は自分の製品とテストコードを大幅に複雑にするハックの束を実行していることに気づきました。この種の問題をどのように正確に回避しますか?
回答: 実装の詳細について心配しすぎています。現在の実装では、isemptyはcount(または他のあらゆる関係)に依存しているということは問題ではありません。パブリックインターフェイス。たとえば、次の3つのテストを行うことができます。 新しく初期化されたオブジェクトにcount == 0。 新しく初期化されたオブジェクトにisempty == true 新しく初期化されたオブジェクトが既知の空のオブジェクトと等しいこと。 これらはすべて有効なテストであり、isemptyがcountに依存しない別の実装を持つようにクラスの内部をリファクタリングすることを決定した場合に特に重要になります。テストはすべて成功し、何も後退していないことがわかります。同様のことが他のポイントにも当てはまります。内部実装ではなく、パブリックインターフェイスをテストしてください。 tddは、実装を記述する前に、isemptyに必要なテストを記述しているので、ここで役立ちます。