多くの単体テストを書きます。しばしば、慎重に検討されたテストケースを手作業で書く必要があります。これはホワイトボックステストの一種です。別の品質保証エンジニアを抱える会社で働くことができれば、おそらく誰かがあなたのためにテストケースを書いているかもしれません(白と黒のボックステストのミックスの一種)。Javaでのランダム化テスト
しかし、無作為化されたテストでは多くのバグが発見され、手書きのケースを補完するものとなります。
たとえば、私は自己完結型のクラスを持ち、クラスの不変量とストロークストロークを単純に表現することができます(「このメソッドは決して例外をスローしません」や「このメソッドは常に正値")。私はクラスにちょうど足を踏み入れ、不変量をチェックするテストフレームワークが欲しいです。
同様のケース:私はしばしば、他のクラスと同様の機能を実装するクラスを持っています(ただし、パフォーマンス特性や機能の追加によって異なります)。私はA対Bの2つのクラスをランダムにテストします。たとえば、私がTreeMap
を実装していたのであれば、HashMap
を同等の実装(ソートされた振る舞いのためにいくつかの違いがモジュロTreeMap
)として使用し、ほとんどの基本機能をランダムにチェックできます。同様に、LinkedList
を実装している人は、同等の実装としてArrayList
を使用できます。逆も同様です。
は、私が過去にこれを行うには、いくつかの基本的なものを書いてきたが、へのすべての定型までに設定する骨の折れるです:
- はランダムな初期状態のオブジェクトを作成します
- ランダム突然変異 を適用します
- 対Bテスト用のオブジェクト
- は、このような
私はまだ時々それをしますが、私は自分の努力水準を下げたいと思います。たとえば、必要な定型文を削除または単純化するフレームワークはありますか?
それ以外の場合は、Javaでランダムテストを行うためにどのような手法が使用されますか?
これは関連性がありますが、ファズテストとは異なります。ファジーテストは、単一のエンティティへのランダム入力に焦点を当てているようであり、悪い動作を引き起こすことを望み、しばしばダイナミックカバレッジ観測に基づく適応型入力モデルを使用します。それは上記の多くをカバーしていますが、同等の実装が存在する場合にはAとBのテスト、不変の検査ではカバーしません。いずれにしても、私はJava用の適切なファズテストライブラリにも興味があります。
http://pitest.org/ –
"私にライブラリを探す"という問題を編集したので、ここで問題を説明します(もちろん、その問題を解決するための図書館を指し示す答えは、まだ話題になっている可能性があります)。 – BeeOnRope
@SilasReinagel - 私は突然変異検査(何が何を提供しているか)を見てきました。つまり、私はそれが私が後にしていることに対する補完的なアプローチだと思っています。これは、あなたのコードを単体テストするための入力を無作為に生成するのではなく、テストの有効性をより良く判断するために、 – BeeOnRope