美文网首页Java单元测试
使用Powermock模拟final类或方法

使用Powermock模拟final类或方法

作者: SeanPenn | 来源:发表于2018-06-20 00:05 被阅读0次

      对于使用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的类或方法是非常简单的。

    相关文章

      网友评论

        本文标题:使用Powermock模拟final类或方法

        本文链接:https://www.haomeiwen.com/subject/jsazeftx.html