Evosuite、Java 単体テスト コード生成ツール

EvoSuite は、シェフィールドなどの大学によって共同開発されたオープン ソース ツールで、テスト ケース セットを自動的に生成するために使用されます。生成されたテスト ケースはすべて Junit 標準に準拠しており、Junit で直接実行できます。
この自動テストツールを利用することで、コードカバレッジの確保を前提にテスターの開発効率を大幅に向上させることができます。ただし、あくまでテストを補助するものであり、手作業を完全に代替するものではなく、テストケースが正しいかどうかは手作業で判断する必要があります。
公式ウェブサイトのアドレス: https://www.evosuite.org/contact/
github アドレス: https://github.com/EvoSuite/evosuite

コア機能:

指定されたクラスに対して、Junit4 タイプの単一のテスト コードを生成します。------選択したクラスの JUnit 4 テストの生成
生成されたユースケースを、回線カバレッジ、分岐カバレッジ、出力カバレッジなどのさまざまなカバレッジ指標に従って調整します。------ライン、分岐、出力、突然変異テストなどのさまざまなカバレッジ基準の最適化
単一のテスト ケースは最小化され、カバレッジに寄与する単一のテスト ケースのみが保持されます。------テストは最小限に抑えられます。カバレッジの達成に貢献したテストのみが保持されます。
生成された単体テスト ケースには Junit アサーションが含まれています。------テストされたクラスの現在の動作をキャプチャするための JUnit アサートの生成
テストはサンドボックスで実行されます。------テストはサンドボックスで実行され、潜在的に危険な操作を防止します
仮想ファイルシステム。------仮想ファイルシステム
仮想ネットワーク。------仮想ネットワーク

2、使用する

公式では、コマンド ライン ツール、Eclipse プラグイン、アイデア プラグイン、Maven プラグインを含むいくつかの動作モードを提供しています。
公式 http://www.evosuite.org/documentation/tutorial-part-2/ を参照してください。

2.1 コマンドラインツール

コマンドラインは、プロジェクトのルートディレクトリ /target/classes/ ディレクトリに入り、次のコマンドを入力します。

java -jar evosuite-1.0.6.jar -class ClassName -projectCP targetPath/。

パラメータの説明:
-class: 実行するオブジェクト
-projectCP: テストによって生成されたクラス パスを設定します
-help: 利用可能なコマンド ライン オプションを表示します
-criterion: テストの標準パラメータは (line、branch、cbranch、mutation、例外など)
-Dminimize =false //カバレッジ ターゲットを満たさないすべてのステートメントを削除します
-Dassertion_strategy=all //多数のアサーションを使用して、
より多くのパラメータに対する長いテストを生成します 開発ドキュメントを参照してください: http ://www.evosuite.org/documentation/tutorial -part-1/

2.2 Maven プラグイン

junit バージョン (Junit4.12 以降) を調整し、evosuite 操作の依存関係を増やします。

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.evosuite</groupId>
    <artifactId>evosuite-standalone-runtime</artifactId>
    <version>1.0.6</version>
    <scope>test</scope>
  </dependency>
</dependencies>
添加 evosuite 插件
<plugin>
   <groupId>org.evosuite.plugins</groupId>
   <artifactId>evosuite-maven-plugin</artifactId>
   <version>1.0.6</version>
</plugin>
有时候,我们会同时执行两类脚本,一类是RD手写的代码,一类是EvoSuite自动生成的,进入同时测试并不会出现什么大问题,但是也会对测试结果有片面的影响,因此需要只能EvoSuite仅对其生成的脚本起作用,需要在pom中加入如下插件。
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.20</version>
   <configuration>
     <properties>
       <property>
          <name>listener</name>
          <value>org.evosuite.runtime.InitializingListener</value>
      </property>
     </properties>
  </configuration>
</plugin> 

コマンドを実行して単体テスト コードを生成します
。 注: Evosuite はコンパイルされたバイトコードに基づいて単体テスト コードを生成するため、evosuite を使用する前にソース コードをコンパイルする必要があります。

示例1:
mvn evosuite:help -Ddetail=true -Dgoal=generate
示例2:
mvn evosuite:generate -Dcuts=com.isoftstone.pcis.service.impl.ApiServiceImpl 
#注意:当工程代码量大时,生成花费的时间可能很长。
示例3:
mvn compile -DmemoryInMB=2000 -Dcores=2 -DtargetFolder=src/test/java/evosuite evosuite:generate evosuite:export test
注意:当工程代码量大时,生成花费的时间可能很长。

使用可能なパラメータと一般的なコマンドの説明:
a. -DmemoryInMB=2000 は、2000MB のメモリを使用することを意味します
b. -Dcores=2 は、生成速度を並列化するために 2 つの CPU を使用することを意味します c
. -Dcuts=packageName.className は、指定されたユースケースのみを生成することを意味しますクラス。複数のユース ケースは英語のコンマ d で区切ることができます
。 -DtargetFolder=src/test/java/evosuite は、生成されたユース ケースが src/test/java/evosuite に配置されることを示します。
e. 一般的に使用されるコマンド
e1. prepare: EvoSuite テストと既存のテストを同時に実行する必要がある mvn evosuite:prepare test
e2. evosuite:generate は、生成されたユース ケースを実行することを意味します
e3. evosuite:export は、ユース ケースをエクスポートすることを意味しますtargetFolder の値が配置されているディレクトリ (デフォルト値は「src/test/java」)
e4.evosuite:clean: 「.evosuite」フォルダー内のすべてのデータを削除します。このフォルダーは、これまでに生成されたすべての最良のテストを保存するために使用されます。
詳細については evosuite:help を参照してください。

実行が完了すると、テスト ファイルが .evosuite ディレクトリに生成されます。
クラスに対して 2 つのテスト ファイルが生成されます: _ESTest.java には 1 つのテスト ケースが含まれ、 _scaffold.java はユース ケースの基本クラスです。テスト前に Evosuite のサンドボックス環境を初期化するために使用されます。
効果の評価
a. Evosuite がサービスが依存する他のオブジェクトを自動的にモックすることがわかります。
b. テスト対象のメソッドのパラメータは、パラメータの種類に応じてさまざまな境界値がテストに使用されます。evoSuite によって生成される単体テスト コード カバレッジは、メソッド カバレッジ 100%、ライン カバレッジ 51% に達します。
c. ツールの欠点: Mock オブジェクトのメソッド呼び出しは null 値などを返すことしかできず、メソッドに特定のスタブがないため、通常のロジックに到達できません。EvoSuite によって生成された単体テスト ケースは、エッジ ケースや異常なケースのテストにより適しています。通常のシーンはまだ人に依存しています

2.3 Eclipseプラグイン

EvoSuite プラグインには Java 8 オペレーティング環境が必要で、Eclipse の Lunar バージョンと Mars バージョンのみをサポートします。システム内に複数の Java 開発環境がある場合は、Eclipse のデフォルトの jre を Java 8 バージョンに設定する必要があります。参照する

プラグインをインストールし、Eclipse
プラグインのパラメータ設定を再起動します
。 テストするクラスを選択し、マウスを右クリックして、「EvoSuite
Junit テスト レポートの生成でテストを生成する」を選択します。

2.4 アイデアプラグイン

プラグインをインストールし、IDEAを再起動します。
テストするクラスを選択し、マウスを右クリックし、「Run EvoSuite」を選択します。
パラメータ入力ダイアログボックスで、パラメータを設定し、リファレンスを実行します。

ここに画像の説明を挿入

3. 他の同様の拡張機能

商用ツール:AgitarOne、zhihuに対応したJtest
無料ツール:CodePlex AnalytiX、EvoSuite、Randoop、JUnitGenerator V2.0(IDEAプラグイン)

おすすめ

転載: blog.csdn.net/heqiushuang110/article/details/126963984