直感的でない計算を実行するいくつかのパラメーターを持つ短い(Java)メソッドがあります。コードカバレッジを達成するためにこのメソッドの単体テストを作成するのは簡単ですが、テストはメソッドの微妙な点をカバーしていません。パラメータ用に定義したパーティションに基づいて、このメソッドのすべてのペア(すべてのタプル)のテストを実行できるテストフレームワークまたはその他のツールを探しています。
たとえば、次の方法があるとします。
int foo(int begin, int end, int first, int last) {
...
}
私はすでにいくつかの制約を知っていますが、それは外部から強制される可能性があります。
begin <= end
first <= last
私自身のパラメータの知識に基づいて、明示的な同値関係を定義したいと思います。例えば:
begin == MIN
begin > MIN && begin < 0
begin == 0
begin == 1
begin > 1 && begin < MAX
begin == MAX
また、複数のパラメーターを含む同値関係を定義したいと思います。例えば:
begin + 1 < end
begin + 1 == end
begin == end
テストする組み合わせは、制約が満たされるように、各同値関係begin == 0
から(たとえば、最初の関係と2番目の関係から)同値類を選択することです。begin + 1 < end
[ちなみに、充足可能性はNP完全であることに気づきました。比較的少数の制約のセットを構成する組み合わせを考えると、私はそれを喜んで受け入れます。]いくつかのパラメーターを使用すると、組み合わせの数が扱いにくくなります。組み合わせごとにテストを手動で作成し、結果として得られる一連の制約を満たす引数を見つけるのは面倒で、エラーが発生しやすくなります。
私は、各組み合わせを自動的にテストできるテストフレームワーク、または論理的に一貫した組み合わせごとにテストを生成できるテストジェネレーター(本当にあなたが挿入する不変のチェック)を探しています。これは、実際の実装からテストケースを生成するCodeProのようなテスト生成ツールとは異なります。事実上、実装ではなく、メソッドのインターフェースのテストを生成したいと思います。これにより、メソッドが実装される前にテストを作成できるようになるだけでなく(TDD)、後で変更した後でもメソッドが包括的にテストされるようになります。
そのようなツールは存在しますか、それとも何かをまとめることができますか?または、おそらく私はこれに間違った方法でアプローチしています、そしてあなたは別の提案があります...