Power Mock使用指南

Power Mock使用指南

集成PowerMock

maven引入

<dependency>
     <groupId>org.powermock</groupId>
     <artifactId>powermock-module-junit4</artifactId>
     <version>2.0.0</version>
     <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito2</artifactId>
    <version>2.0.0</version>
    <scope>test</scope>
</dependency>

对象有返回值方法

mapper方法

@Component
public class UserMapperImpl implements UserMapper {


    @Override
    public int add(User user) {
        return 0;
    }

    @Override
    public void update(User user) {

    }
}

service方法

@Service
public class UserServiceImpl {

    @Autowired
    private UserMapper userMapper;

    public int add(User user){
       return userMapper.add(user);
    }
}

单测

@RunWith(PowerMockRunner.class)
public class UserServiceImplTest {

    @InjectMocks
    private UserServiceImpl userService;

    @Mock
    private UserMapper userMapper;

    @Test
    public void add() {
        PowerMockito.when(userMapper.add(any(User.class))).thenReturn(1);
        int count = userService.add(new User());
        Assert.assertEquals(1,count);
    }
}

对象没有返回值的方法

mapper方法

@Override
public void update(User user) {
    System.out.println("update方法被调用");
}

service方法

public void update(User user){
    userMapper.update(user);
}

单测

@Test
public void update() {
    PowerMockito.doNothing().when(userMapper).update(any(User.class));
    userService.update(new User());
}

静态有返回值方法

静态方法

public class RedisUtil {

    public static String get(String key){
        return "123";
    }
}

service方法

 public String getRedis(String key){
     return RedisUtil.get(key);
 }

单测 使用@PrepareForTest({RedisUtil.class})和PowerMockito.mockStatic(RedisUtil.class);

@RunWith(PowerMockRunner.class)
@PrepareForTest({RedisUtil.class})
public class UserServiceImplTest {

    @InjectMocks
    private UserServiceImpl userService;

    @Mock
    private UserMapper userMapper;

    @Test
    public void getRedis(){
        String hello = "hello world";
        PowerMockito.mockStatic(RedisUtil.class);
        PowerMockito.when(RedisUtil.get(anyString())).thenReturn(hello);
        String redisGet = userService.getRedis("hello");
        Assert.assertEquals(hello,redisGet);
    }
}

静态没有返回值方法

静态方法

public static void set(String key,String vale){
    System.out.println("调用实际set方法");
}

service方法

public void setRedis(){
    RedisUtil.set("hello","hello world");
}

单测

@Test
public void setRedis() throws Exception {
    PowerMockito.mockStatic(RedisUtil.class);
    PowerMockito.doNothing().when(RedisUtil.class,"set",anyString(),anyString());
    userService.setRedis();
}

私有有返回值方法

私有方法

private String sayHello(){
    return "hello";
}

调用方法

public String hello(){
    return sayHello();
}

单测


@RunWith(PowerMockRunner.class)
@PrepareForTest({RedisUtil.class,UserServiceImpl.class})
public class UserServiceImplTest {

    @InjectMocks
    private UserServiceImpl userService;

    @Mock
    private UserMapper userMapper;
    
    @Test
    public void hello() throws Exception {
        UserServiceImpl spy = PowerMockito.spy(userService);
        PowerMockito.when(spy,"sayHello").thenReturn("hello world");
        String hello = spy.hello();
        Assert.assertEquals("hello world", hello);
    }
}

私有没有返回值方法

私有方法

private void sayNothing(){
    System.out.println("nothing");
}

调用方法

public void nothing(){
    sayNothing();
}

单测

@Test
public void nothing() throws Exception {
    UserServiceImpl spy = PowerMockito.spy(userService);
    PowerMockito.doNothing().when(spy,"sayNothing");
    spy.nothing();
}

方法内创建对象

构造方法

@Data
public class User {

    private String username;

    private String password;

    public User() {
        this.username = "hello";
        System.out.println("创建User对象");
    }

}

service方法

public void addUser(){
    User user = new User();
    userMapper.add(user);
}

单测

@Test
public void addUser() throws Exception {
    User user = PowerMockito.mock(User.class);
    PowerMockito.whenNew(User.class).withNoArguments().thenReturn(user);
    userService.addUser();
    Assert.assertEquals(null,user.getUsername());
}

静态私有属性

静态属性

private static Integer count = 1;

调用方法

public int getCount(){
    return count;
}

单测

@Test
public void getCount(){
    Whitebox.setInternalState(UserServiceImpl.class,"count",10);
    int count = userService.getCount();
    Assert.assertEquals(10,count);
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值