1 创建一个标准的Maven工程,Pom中切记要选择 <packaging>war</packaging> war或者jar均可,但是不能是pom,否则maven test命令只会 Building工程。这个是我搭建测试项目遇到的坑
2 引入JMockit依赖
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <!--<scope>test</scope>--> </dependency> <dependency> <groupId>org.jmockit</groupId> <artifactId>jmockit</artifactId> <version>1.38</version> <!--<scope>runtime</scope>--> </dependency>
3 引入maven-surefire-plugin,否则Jmockit测试跑完后,并不会生成HTML测试覆盖率的报告
<plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <!-- 与maven test阶段绑定 --> <artifactId>maven-surefire-plugin</artifactId> <version>2.20</version> <configuration> <systemPropertyVariables> <coverage-output>html</coverage-output> <coverage-outputDir>target/coverage-report</coverage-outputDir> </systemPropertyVariables> </configuration> </plugin> </plugins>
这里要特别注意一点,maven test命令只会跑 src/test/java下测试类,命名规则如下:
默认包含的测试类:
**/*Test.java
**/Test*.java
**/*TestCase.java
默认排除的测试类:
**/Abstract*Test.java
**/Abstract*TestCase.java
4 举个列子:
@RunWith(JMockit.class) public class TestJApp1_1 { @Tested Service testedService; @Injectable Dependency dependency; @Test public void exeUnitTest() { new Expectations() {{ dependency.findSomeData(anyString); result = new Data("345"); }}; testedService.doSomething("..."); } }
该测试类放在src/test/java下
public class Service { private Dependency dependency; public Data doSomething(String someData) { Data data = dependency.findSomeData(someData); System.out.println(data.getText()); return data; } public String fun() { return "call original method"; } } public class Dependency { public Data findSomeData(String anyString) { System.out.println("Dependency -->"+anyString); log(anyString); return new Data(anyString); } private void log(String text){ System.out.println("Dependency private log -->"+text); } } public class Data { private String text; public Data(String text) { this.text = text; } public String getText() { return text; } }
这个类放在src/main/java下。右键runas 或者maven test 都会生成测试报告,效果如下