グアバ単体テストはどのように自動的に生成されましたか?


31

グアバには、自動生成されるユニットテストケースがあります

グアバには膨大な数の単体テストがあります。2012年7月現在、guava-testsパッケージには286,000を超える個別のテストケースが含まれています。これらのほとんどは、手書きではなく自動的に生成されますが、特にcom.google.common.collectの場合、グアバのテスト範囲は非常に徹底しています。

それらはどのように生成されましたか?それらを設計および生成するためにどのような技術と技術が使用されましたか?


この話題に触れたグーグルの男による講演を見たことを覚えています。名前についての手がかりはありませんが、講演は私が思ういくつかのJavaコンベンションで行われました
ザビオール

3
パッケージcom.google.common.collect.testingには、名前に「Generator」を含む多くのクラスがあり、テスト生成のフレームワークのように見えます。また、テスト用に「スケルトン」または「ベースクラス」として文書化されたクラスを持つサブパッケージもあります
...-gnat

1
@gnatはい、どこかで見たことがあると確信しました。たとえば、com.google.common.collect.testing.featuresは、コレクションクラスが満たすべきtfeatures / constrainsを示し、テストケースはそれらの組み合わせです。このようにして、彼らはテストをパラメータ化できる
-dzieciou

あなたは上でより多くの運を持っていることがあり、ソフトウェアの品質保証とTesting.SX
M.シュレーダー-復活モニカ

この質問はコミュニティから多くの注目を集めましたが、これまでのところ合理的な答えはありませんでしたので、Martinの提案に従って、ここにそれを置きました:sqa.stackexchange.com/questions/5214/…
dzieciou

回答:


8

この大量のテストの大部分は、グアバコレクションの実装用です。彼らは、コレクションインターフェイスを徹底的にテストする汎用テストを作成しました。これにより、実装ごとにスイートが生成されます。たとえば、と呼ばれるクラスのために、参照してくださいCollectionAddAllTesterListIndexOfTester

これはすべて、testavaと呼ばれるライブラリによってサポートされています。testlibは、Guavaの一部として出荷されます。これは非常に一般的です。コレクションだけでなく、あらゆるインターフェイスの汎用テストの作成をサポートしています。Feature可能な実装のsを指定し、それらをテストできます(たとえば、セットが変更不可能な場合、異なる結果が期待されますset.add())。テストを実行するとき、実装がサポートする機能を指定します。

4ではなくJUnit 3に基づいています。通常、TestCaseという名前のメソッドでいっぱいのクラスがtestSomething()あり、JUnitはそれらをリフレクションで実行します。testlibライブラリは、これらのテストの実行にフックするため、ライフサイクルは次のようになります。

  • テストする実装ごとに
  • 各(該当する)テスト方法について
  • 作成する TestCaseインスタンスを
  • 初期化する TestSubjectGenerator -これは、実際にテストサブジェクトを作成する場所を拡張するtestlibインターフェイスです
  • テストメソッドを反射的に実行します。この方法の間getSubjectGenerator()に、被験者にアクセスできるようにします

重要なのは、特定のテストサブジェクトを汎用テストケースに挿入できるようにする追加の初期化ステップです。

独自のインターフェース用のスイートを生成するtestlibの書き方に関する投稿書きました

sqaサイトの同じ質問にも投稿されています。)


6

ユニットテストジェネレーターがあります。たとえば、.NETの世界では、Microsoft Pexのようなものがこれを実行できます。

たとえば、Microsoft Pexは、コード分析に基づいて、メソッドの引数として可能なすべての値を試行します。一部の引数では、メソッドが例外をスローすることが期待されています。そのようなものは、作成されたテストを自動的に実行できます。特定の場合に返される空の文字列のような静的な値も自動的にテストできます。


2
これは、負のパステスト(例外、無効な入力、クラッシュ、タイムアウト)にのみ役立つランダムテストです。彼らは幸福な道のためにもテストを生成したと信じており、これには静的解析ツールを起動するだけでなく、より多くの設計が必要です。
-dzieciou

そして、私は(例えば、この参照の幸せな道のためにテストを生成するための方法やツールがある知っている答えを、これはグアバの特定の場合には行われていたか)が、私は興味がある
dzieciou
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.