PowerMock

PowerMock is a framework that extends other mock libraries such as EasyMock with more powerful capabilities.

Quick Start

给一个简单的使用范例。

  • Project Struct
  [plaintext]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
├─pom.xml │ ├─src │ ├─main │ │ └─java │ │ └─com │ │ └─ryo │ │ ├─domain │ │ │ User.java │ │ │ │ │ └─service │ │ │ UserService.java │ │ │ │ │ └─impl │ │ UserServiceImpl.java │ │ │ └─test │ └─java │ └─com │ └─ryo │ └─service │ └─impl │ UserServiceImplTest.java
  • pom.xml

用于常用 jar 的引入。

  [xml]
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
<?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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ryo</groupId> <artifactId>powermock</artifactId> <version>1.0-SNAPSHOT</version> <properties> <junit.version>4.12</junit.version> <mockito.version>1.10.19</mockito.version> <powermock.version>1.6.4</powermock.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>${mockito.version}</version> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>${powermock.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>${powermock.version}</version> <scope>test</scope> <exclusions> <exclusion> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> </exclusion> <exclusion> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </exclusion> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project>
  • User.java

简单定义

  [java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class User { private String username; public String getUsername(){ return username; } public void setUsername(String username){ this.username = username; } @Override public String toString(){ return "User{" + "username='" + username + '\'' + '}'; } }
  • UserService.java & UserServiceImpl.java
  [java]
1
2
3
public interface UserService { User getUser(Long id); }
  [java]
1
2
3
4
5
6
7
8
9
10
11
12
public class UserServiceImpl { public boolean checkId(Long id) { return privateMethod(); } private boolean privateMethod() { System.out.println("call private method."); return true; } }
  • UserServiceImplTest.java
  [java]
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
@RunWith(PowerMockRunner.class) @PrepareForTest(UserServiceImpl.class) public class UserServiceImplTest { @Mock private UserService userService; @Before public void init() { MockitoAnnotations.initMocks(this); mockGetUser(); } /** * 对获取的信息进行Mock */ private void mockGetUser() { User user = new User(); user.setUsername("powermock"); Mockito.when(userService.getUser(Mockito.anyLong())) .thenReturn(user); } @Test public void testGetUser() { User user = userService.getUser(1L); System.out.println(user); } @Test public void testCheckId() { final Long id = 1L; UserServiceImpl userService = new UserServiceImpl(); userService.checkId(id); } @Test public void testPrivateMock() throws Exception{ final Long id = 1L; UserServiceImpl userService = PowerMockito.mock(UserServiceImpl.class); PowerMockito.when(userService.checkId(id)).thenCallRealMethod(); PowerMockito.when(userService, "privateMethod").thenReturn(false); } }