だから私はテストがあるとしましょう
_@Test
public void testA(){
new A().doSomthing();
}
_
そして、それがメソッドdoSomething()
をカバーしているとしましょう。私のプロジェクトでは、1,000万のテストがあり、このテストはそのうちの1つにすぎません。小さなテストではあまり効果がありません。
ここで、私のdoSomething
メソッドが次のようになっているとしましょう。-
_public void doSomething() {
if (var1)
killMylSelf();
else if (var2)
killMyMother();
else
killMySelfAndMyMother();
}
_
ご覧のとおり、メソッドには多くのブランチがあり、その結果、さらに多くのブランチを持つ他のメソッドが呼び出されます。 testA
を実行すると、実行されたコードでどのブランチを見逃したかを確認したいのですが、すべての単体テストを実行せずに、気になるテストだけを実行せずに、これを実現するにはどうすればよいですか。
質問に答えるときは、これらの魔法の言葉を覚えておいてくださいすべてのユニットテストを実行する必要はなく、私が気にかけているテストのみを実行する必要はありません
JaCoCoはテストを実行しません、実行された内容に関する情報を記録するだけです。したがって、単一のテストの場合を含め、テストの実行はテストの実行に使用するツールに完全に依存しますが、残念ながら、質問。
ビルドツールとしてMavenを使用する場合、テストの実行は通常、maven-surefire-plugin
によって実行および制御されます。これには オプションtest
が含まれます。個別のテストを実行します。次に例を示します。
src/main/Java/Example.Java
:
public class Example {
public void doSomething(int p) {
if (p == 1) {
a();
} else {
b();
}
}
private void a() {
System.out.println("a");
}
private void b() {
System.out.println("b");
}
}
src/test/Java/ExampleTest.Java
:
import org.junit.Test;
public class ExampleTest {
@Test
public void test1() {
new Example().doSomething(1);
}
@Test
public void test2() {
new Example().doSomething(2);
}
}
pom.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
mvn clean verify -Dtest=ExampleTest#test1
を実行すると、ディレクトリtarget/site/jacoco
に次のレポートが生成されます。
mvn clean verify -Dtest=ExampleTest#test2
を実行すると、次のようになります。
それぞれtest1
とtest2
のカバレッジを示しています。
比較のために-mvn clean verify
によるすべてのテストの実行は以下を生成します:
clean
の使用に関する注意:ファイルtarget/jacoco.exec
には実行情報が含まれ、レポートの生成に使用されます( エージェントオプションdestfile
および jacoco-maven-plugin
の対応するパラメーター を参照)。デフォルトでは、JaCoCoエージェントがこのファイルに追加します( エージェントオプションappend
および jacoco-maven-plugin
の対応するパラメーター を参照)。この例では、このファイルにデータが蓄積されないようにclean
が使用されます。以前の実行について。
Gradleを使用する場合、それも 同様の能力を持っています -同じソースとbuild.gradle
を与えられます:
apply plugin: 'Java'
apply plugin: 'jacoco'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.12'
}
gradle clean test --tests ExampleTest.test1 jacocoTestReport
を実行すると、test1
のカバレッジを含むレポートが生成されます。これは、Mavenの場合と同じです。
Mavenの例と同様に、この例ではclean
を使用して、ファイルbuild/jacoco/test.exec
-- JaCoCo Gradle Plugin
のappend
プロパティを参照 での以前の実行に関するデータの蓄積を防ぎます。
Eclipse IDEを使用する場合、JaCoCoをEclipseに統合する EclEmma Eclipseプラグイン がありますIDEおよびOxygen(4.7)バージョン以降、「Eclipse IDE for JavaDevelopers」にデフォルトで含まれています。これを使用すると、Eclipseで単一のテストのカバレッジを取得することもできますIDE-エディターでテスト名を右クリックしてコンテキストメニューを取得し、[Coverage As-> JUnitTest]を選択します。