先上代码和pom依赖
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringRunner.class)
@PowerMockIgnore({"javax.management.*", "javax.net.ssl.*"})
@PrepareForTest({StringUtils.class})
@SpringBootTest()
public class DemoStringServiceImplTest {
@Autowired
DemoStringService stringService;
@Test
public void add() {
PowerMockito.mockStatic(StringUtils.class);
Mockito.when(StringUtils.add("test")).thenReturn("123456");
String test = stringService.add("test");
System.out.println(test);
}
}
其中StringUtils是一个静态类,里面是简单的静态方法,而DemoStringService是使用这个静态方法的地方
public class StringUtils {
public final static String add(String str) {
return str+"****";
}
}
POM依赖
<properties>
<powermock.version>2.0.2</powermock.version>
</properties>
<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-mockito2</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
问题点:
-
使用PowerMockRunner代替SpringRunner , 并且@PrepareForTest来表示需要mock静态方法的类
-
当出现Powermock和mock冲突时 org.mockito.internal.handler.MockHandlerFactory.createMockHandler(Lorg/mocki) , 可尝试调整Powermock的依赖位置到spring的前面
网友评论