web-dev-qa-db-ja.com

C ++では、プライベート配列に「スペース」がなくなったときに例外をスローする必要があるメソッドを1つのユニットでどのようにテストしますか?

私は、データ指向の設計と、キャッチ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()の目的は、単純にEntityeと呼ぶ)を返し、_entities[e]_をある値に設定することです。ただし、存在するエンティティの数が_MAX_NUM_ENTITIES_より多い場合、メソッドは例外をスローする必要があります。

上記の方法を単体テストしたいと思います。しかし、どうすればよいかわかりません。私の考えは、テストでcreateEntity() _MAX_NUM_ENTITIES + 1_を呼び出してentities配列全体を埋め、例外をトリガーすることです。しかし、それが最善の方法ではなく、テストの実行が遅くなる可能性さえあると感じています。別のアイデアですが、前のアイデアと似ていますが、entitiesをモックして、サイズを小さくすることです。次に、前のアイデアと同じように例外が発生するまでcreateEntity()を複数回呼び出します。

どのようなアプローチをお勧めしますか?

プライベート配列に「スペース」がなくなったときに例外をスローする必要があるメソッドを1つのユニットがどのようにテストしますか?

逆の質問:テストをサポートする方法をどのように設計しますか?

おそらく、テストでバッファーのサイズを制御できるように配置し、1や2などの簡単なテストに設定できるようにすることもできます。 。

「テストが難しいデザイン」を「テストが容易なデザイン」に置き換えることは、 tdd の重要な動機です。

4
VoiceOfUnreason