使用dropwizard(4)-加入测试-jacoco代码覆盖率

简介: 前言dropwizard提供了一个简单的测试框架。这里简单集成并加入jacoco测试。Demo sourcehttps://github.com/Ryan-Miao/l4dropwizard本文是基于dropwizard入门之上的演进。

img_17e764d4d3011ebd0a2a577f51ad1293.png

前言

dropwizard提供了一个简单的测试框架。这里简单集成并加入jacoco测试。

Demo source

https://github.com/Ryan-Miao/l4dropwizard

本文是基于dropwizard入门之上的演进。

确保依赖都是最新的,或者自行解决版本冲突,比如jackson不同版本之间的类有所不同。

加入dropwizard-testing

在dependencies中增加依赖

<dependency>
    <groupId>io.dropwizard</groupId>
    <artifactId>dropwizard-testing</artifactId>
    <version>${dropwizard.version}</version>
    <scope>test</scope>
</dependency>

新增Mockito

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>2.12.0</version>
    <scope>test</scope>
</dependency>

新增jacoco

在properties下新增

<jacoco.skip.instrument>true</jacoco.skip.instrument>
<jacoco.percentage.instruction>0.01</jacoco.percentage.instruction>
<jacoco.percentage.branch>0</jacoco.percentage.branch>

在plugin新增

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <configuration>
        <excludes>
            <exclude>**/ioc/**/*</exclude>
            <exclude>**/exceptions/**/*</exclude>
            <exclude>**/connector/*</exclude>
            <exclude>**/valueobject/**/*</exclude>
            <exclude>**/exception/**/*</exclude>
            <exclude>**/entity/**/*</exclude>
            <exclude>**/constant/*</exclude>
            <exclude>**/*Test.*</exclude>
            <exclude>**/Dagger*</exclude>
            <exclude>**/*Factory.*</exclude>
            <exclude>**/*Module.*</exclude>
        </excludes>
    </configuration>
    <executions>
        <execution>
            <id>jacoco-initialize</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>jacoco-check</id>
            <phase>test</phase>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <rules>
                    <rule implementation="org.jacoco.maven.RuleConfiguration">
                        <element>BUNDLE</element>
                        <limits>
                            <limit implementation="org.jacoco.report.check.Limit">
                                <counter>INSTRUCTION</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>${jacoco.percentage.instruction}</minimum>
                            </limit>
                            <limit implementation="org.jacoco.report.check.Limit">
                                <counter>BRANCH</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>${jacoco.percentage.branch}</minimum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
        </execution>
        <execution>
            <id>jacoco-report</id>
            <phase>test</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
        <execution>
            <id>jacoco-instrument</id>
            <phase>test</phase>
            <goals>
                <goal>instrument</goal>
            </goals>
            <configuration>
                <skip>${jacoco.skip.instrument}</skip>
            </configuration>
        </execution>
    </executions>
</plugin>

编写测试

首先,更新依赖,

mvn clean install

IDEA中刷新maven按钮。

然后,新建Resource测试类:

package com.test.domain.resource;

import com.test.domain.entiry.GithubUser;
import com.test.domain.service.IGithubService;
import io.dropwizard.testing.junit.ResourceTestRule;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

/**
 * Created by Ryan Miao on 11/20/17.
 */
public class GithubResourceTest {

    private static final IGithubService service = mock(IGithubService.class);

    @ClassRule
    public static final ResourceTestRule resources = ResourceTestRule.builder()
            .addResource(new GithubResource(service))
            .build();


    @Before
    public void setup() {

    }

    @After
    public void tearDown(){
        // we have to reset the mock after each test because of the
        // @ClassRule, or use a @Rule as mentioned below.
        reset(service);
    }

    @Test
    public void testGetPerson() {

        GithubUser user = new GithubUser();
        String name = "Ryan";
        user.setName(name);
        when(service.getUserProfile(anyString())).thenReturn(user);
        GithubUser githubUser = resources.target("/github/users/ryan-miao").request().get(GithubUser.class);
        assertEquals(name, githubUser.getName());
        verify(service).getUserProfile("ryan-miao");
    }

}

验收,查看覆盖率

mvn clean install

查看jacoco覆盖率

report在target/site/jacoco/index.html





唯有不断学习方能改变! -- Ryan Miao
目录
相关文章
|
6月前
|
测试技术 数据库 开发者
开发与运维测试问题之高代码覆盖率意味着高代码质量如何解决
开发与运维测试问题之高代码覆盖率意味着高代码质量如何解决
|
Java 测试技术
利用JaCoCo统计接口测试中代码覆盖率
做接口测试,很多时候都会听到,你接口测试的覆盖率是多少?很多人会回答80%,你怎么统计的,他说覆盖了80%的需求。这个回答没有错误,但是片面,我们不能只考虑需求的覆盖率,还有业务的覆盖率,场景的覆盖率,接口的覆盖率,代码的覆盖率等,本文介绍接口测试的代码覆盖率。那么我们来看看如何是实现的。
利用JaCoCo统计接口测试中代码覆盖率
|
Java 测试技术 Maven
SpringCloud项目编译打包执行单元测试(修复单元测试数量为0)-流水线sonarqube扫描jacoco插件展示覆盖率
SpringCloud项目编译打包执行单元测试(修复单元测试数量为0)-流水线sonarqube扫描jacoco插件展示覆盖率
|
SQL Java 关系型数据库
软件测试|SonarQube 安装、配置及 JaCoCo、Maven 集成
软件测试|SonarQube 安装、配置及 JaCoCo、Maven 集成
软件测试|SonarQube 安装、配置及 JaCoCo、Maven 集成
|
数据采集 测试技术 Android开发
【精准测试】iOS 代码覆盖率数据采集自动化实践
《简单两步实现 Jacoco+Android 代码覆盖率的接入!(最新最全版)》介绍了如何实现Android端的代码覆盖率接入,基于同样的背景我们也需要实现iOS端的代码覆盖率数据采集。
1051 0
【精准测试】iOS 代码覆盖率数据采集自动化实践
|
XML 网络协议 架构师
只懂黑盒测试也能学会的代码覆盖率及精准化测试
只懂黑盒测试也能学会的代码覆盖率及精准化测试
|
测试技术 应用服务中间件
ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率
ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率
ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率
|
XML 架构师 网络协议
只懂黑盒测试也能学会的代码覆盖率及精准化测试
测试覆盖率是对测试完成程度的度量。它通常依据某种覆盖准则来对测试用例执行情况进行衡量,以判断测试执行得是否充分 。 ——出自《 计算机科学技术名词 》第三版 今天文章中我们给大家介绍覆盖率统计及覆盖率分析。在10月13日20:00,资深测试开发架构师思寒将光临直播间手把手教大家如何搞定精准化测试! 温馨提示:你以为代码覆盖率与精准化测试知识与黑盒测试无缘?不,你只是没遇到思寒讲的这节课。
|
XML 架构师 Java
只懂黑盒测试也能学会的代码覆盖率及精准化测试
测试覆盖率是对测试完成程度的度量。它通常依据某种覆盖准则来对测试用例执行情况进行衡量,以判断测试执行得是否充分 。 ——出自《 计算机科学技术名词 》第三版 今天文章中我们给大家介绍覆盖率统计及覆盖率分析。在10月13日20:00,资深测试开发架构师思寒将光临直播间手把手教大家如何搞定精准化测试! 温馨提示:你以为代码覆盖率与精准化测试知识与黑盒测试无缘?不,你只是没遇到思寒讲的这节课。
只懂黑盒测试也能学会的代码覆盖率及精准化测试
|
数据可视化 算法 测试技术
精准测试与开源工具Jacoco的覆盖率能力大PK
本文根据实际使用情况,简要分析了精准测试和类Jacoco等传统白盒工具在设计理念、功能和应用场景的异同点,并阐述了覆盖率技术如何在新型企业开发体系中,发挥应有的重要作用。
3029 0