美文网首页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类或方法

      对于使用final修饰符修饰的类或方法,都是不能被继承的,Mockito也不支持mock带final修饰符的类...

  • PowerMock简介

    PowerMock扩展自Mockito,通过Java反射机制解决Mockito的一些问题,比如:在模拟final,...

  • Android单元测试之PowerMockito

    背景 由于Mockito的局限性,对final、private、static等方法不能mock,PowerMock...

  • final关键字

    1.在java中final被称为终结器,可以使用final定义类,方法,属性, 如果使用final定义的类不能有子...

  • powermock series 1

    PowerMock-and-Mockito-Learning 使用实例 1. 模拟接口返回 InterfaceTo...

  • MS-面向对象

    finallfinal关键字可以加在类或者类中方法之前,但是不能使用final标识成员属性使用final标识的类,...

  • final关键字

    在Java中final被称为终接器,可以使用final来定义类、方法、属性。 1. 使用final定义的类不能有子...

  • Java final finally finalize区别

    final final指的是“这是无法改变的”。final可以修饰类、方法和数据。 finally 异常捕获使用 ...

  • Java基础——final 一成不变不可变?

    final可以修饰类,方法,变量。 一、final和类 final修饰类不可以被继承。 final 类的 方法 自...

  • Java笔记:final关键字、抽象类

    final final关键字又被称为完结器,有终结的意思。 final能声明类、方法、变量。 使用final声明的...

网友评论

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

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