私は、データ指向の設計と、キャッチ2を使用したTDD手法を使用してECSシステムを実装しています。EntityManager
には、次のクラス宣言スニペットがあります。
_using Entity = std::uint16_t;
using Signature = std::bitset<MAX_NUM_COMPONENTS>;
const std::uint16_t MAX_NUM_ENTITIES = 10000;
class EntityManager
{
public:
...
Entity createEntity();
...
private:
Signature entities[MAX_NUM_ENTITIES];
...
}
_
EntityManager::createEntity()
の目的は、単純にEntity
(e
と呼ぶ)を返し、_entities[e]
_をある値に設定することです。ただし、存在するエンティティの数が_MAX_NUM_ENTITIES
_より多い場合、メソッドは例外をスローする必要があります。
上記の方法を単体テストしたいと思います。しかし、どうすればよいかわかりません。私の考えは、テストでcreateEntity()
_MAX_NUM_ENTITIES + 1
_を呼び出してentities
配列全体を埋め、例外をトリガーすることです。しかし、それが最善の方法ではなく、テストの実行が遅くなる可能性さえあると感じています。別のアイデアですが、前のアイデアと似ていますが、entities
をモックして、サイズを小さくすることです。次に、前のアイデアと同じように例外が発生するまでcreateEntity()
を複数回呼び出します。
どのようなアプローチをお勧めしますか?
プライベート配列に「スペース」がなくなったときに例外をスローする必要があるメソッドを1つのユニットがどのようにテストしますか?
逆の質問:テストをサポートする方法をどのように設計しますか?
おそらく、テストでバッファーのサイズを制御できるように配置し、1や2などの簡単なテストに設定できるようにすることもできます。 。
「テストが難しいデザイン」を「テストが容易なデザイン」に置き換えることは、 tdd の重要な動機です。