前言 dropwizard提供了一个简单的测试框架。这里简单集成并加入jacoco测试。
Demo source https://github.com/Ryan-Miao/l4dropwizard
本文是基于dropwizard入门 之上的演进。
确保依赖都是最新的,或者自行解决版本冲突,比如jackson不同版本之间的类有所不同。
加入dropwizard-testing 在dependencies中增加依赖
1 2 3 4 5 6 <dependency> <groupId>io.dropwizard</groupId> <artifactId>dropwizard-testing</artifactId> <version>${dropwizard.version}</version> <scope>test</scope> </dependency>
新增Mockito 1 2 3 4 5 6 7 8 9 10 11 <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下新增
1 2 3 <jacoco.skip.instrument>true</jacoco.skip.instrument> <jacoco.percentage.instruction>0.01</jacoco.percentage.instruction> <jacoco.percentage.branch>0</jacoco.percentage.branch>
在plugin新增
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 <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 >
编写测试 首先,更新依赖,
IDEA中刷新maven按钮。
然后,新建Resource测试类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 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;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 () { 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" ); } }
验收,查看覆盖率 查看jacoco覆盖率 report在target/site/jacoco/index.html