使用Powermock模拟final类或方法

  对于使用final修饰符修饰的类或方法,都是不能被继承的,Mockito也不支持mock带final修饰符的类和方法,如果想要mock final,仍然需要使用Powermock。

一、final类

  首先看下被测试代码:

public class User {
    private String username;
    private String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
}
final public class UserManage {
    public boolean insertUser(User user) {
        throw new UnsupportedOperationException();
    }
}
public class UserService {
    private UserManage userManage;

    public UserService(UserManage userManage) {
        this.userManage = userManage;
    }

    public void createUser(User user) {
        userManage.insertUser(user);
    }
}

  UserManage是一个使用final修饰的类,在UserService类中被使用。现在如果想要测试createUser方法,而UserManage的insertUser方法还没有被实现,因此需要对这个方法进行mock。

@RunWith(PowerMockRunner.class)
@PrepareForTest({UserManage.class})
public class UserServiceTest {
    @Mock
    private UserManage userManage;

    @Test
    public void testCreateUser() throws Exception {
        User user = new User("test1", "123");
        PowerMockito.when(userManage.insertUser(user)).thenReturn(true);

        UserService userService = new UserService(userManage);
        userService.createUser(user);

        Mockito.verify(userManage).insertUser(user);
    }
}

  此处需要注意的是需要把UserManage.class放入到@PrepareForTest的括号里面。

二、final方法

  mock final方法和mock final类的方式是一样的,现在修改下UserManage类,其他代码不变,执行测试代码时仍然是正确的。

public class UserManage {
    public final boolean insertUser(User user) {
        throw new UnsupportedOperationException();
    }
}

  从上面的例子可以看出,mock final的类或方法是非常简单的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,976评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,854评论 18 139
  • 今天下午去学车,无聊的时候下了个应用,名字叫无秘。其实以前有玩过,后来人太少就删掉了,不过最近看起来人挺多的。 该...
    独木Atree阅读 252评论 0 1
  • 分手后一蹶不振的人,说白了都是怂包,是因为失去了以前的依赖,不敢独自面对明天。把男朋友看成是天,是唯一,就是...
    张小笛阅读 163评论 0 0
  • ——《老人与海》【美】海明威 是一篇较短的小说,从头到尾只着重描述了老人与他的大鱼相互斗争的过程。夜里看完的时候我...
    雾歆阅读 207评论 0 1