那么让我们说我有一个测试
@Test
public void testA(){
new A().doSomthing();
}
让我们说它涵盖了一个方法doSomething()
,现在在我的项目中,我有1000万个测试,而这个测试只是其中之一。小测试没什么用。
现在让我们说我的doSomething
方法如下: -
public void doSomething() {
if (var1)
killMylSelf();
else if (var2)
killMyMother();
else
killMySelfAndMyMother();
}
因为你可以看到方法中有很多分支,因此调用其他具有更多分支的方法。当我运行testA
时,我想知道在执行的代码中我错过了哪些分支,如何在没有运行所有单元测试的情况下实现这一点,而且只进行我关注的测试,
当你回答问题时,请记住这些神奇的词语没有运行所有单位的测试,只有我关心的测试
答案 0 :(得分:3)
JaCoCo不执行您的测试,它只是记录有关执行内容的信息。因此,测试的执行(包括单个测试的情况)完全取决于您用于执行测试的工具,遗憾的是,您的问题未提及。
如果您使用 Maven 作为构建工具,则执行测试通常由maven-surefire-plugin
完成并由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
执行所有测试会产生:
关于clean
的使用情况的说明:文件build.gradle
包含执行信息并用于生成报告(请参阅和agent option destfile
)。默认情况下,JaCoCo代理会附加到此文件(请参阅corresponding parameter of jacoco-maven-plugin
和agent option append
),以便在此示例中使用apply plugin: 'java'
apply plugin: 'jacoco'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.12'
}
来防止此文件中有关先前执行的数据累积。
如果您使用 Gradle ,那么它也corresponding parameter of jacoco-maven-plugin
- 给定相同的来源和gradle clean test --tests ExampleTest.test1 jacocoTestReport
:
test1
执行clean
将生成包含build/jacoco/test.exec
覆盖率的报告,这与Maven的情况相同。
与Maven的示例类似,此示例中使用//The code below write on the Application node only
with TEventLogger.Create('JarvisAgent') do
begin
try
try
LogMessage(Msg, EVENTLOG_INFORMATION_TYPE, 0, 2);
finally
Free;
end;
except
end;
end;
来防止在文件 var CurrPage = 4;
$('#pagination-long').materializePagination({
align: 'center',
lastPage: 10,
firstPage: 1,
currentPage:CurrPage,
useUrlParameter: false,
onClickCallback: function(requestedPage) {
console.log('Requested page from #pagination-long: ' + requestedPage);
}
});
- has similar ability中累积有关先前执行的数据。
如果你使用 Eclipse IDE ,那么有see append
property of JaCoCo Gradle Plugin
在Eclipse IDE中集成了JaCoCo,默认包含在“Eclipse IDE for Java Developers”中,从Oxygen(4.7)版本开始。有了它,您还可以在Eclipse IDE中获得单个测试的内容 - 在编辑器中右键单击测试名称以获取上下文菜单,然后选择“Coverage As - &gt; JUnit Test”。