Mock Final
mockfinal 相对来说就比较简单了, 使用 powermock 来测试使用 final 修饰的 method 或 class, 比较简单, 接口调用部分, 还是 service 调用 dao.
对于接口及场景这里就不细说了, 特别简单.
service 层
具体代码示例如下:
- package com.rongrong.powermock.mockfinal;
- /**
- * @author rongrong
- * @version 1.0
- * @date 2019/11/27 21:29
- */
- public class StudentFinalService {
- private StudentFinalDao studentFinalDao;
- public StudentFinalService(StudentFinalDao studentFinalDao) {
- this.studentFinalDao = studentFinalDao;
- }
- public void createStudent(Student student) {
- studentFinalDao.isInsert(student);
- }
- }
dao 层
为了模拟测试, 我在 dao 层的类加了一个 final 关键字进行修饰, 也就是这个类不允许被继承了.
具体代码如下:
- package com.rongrong.powermock.mockfinal;
- /**
- * @author rongrong
- * @version 1.0
- * @date 2019/11/27 21:20
- */
- final public class StudentFinalDao {
- public Boolean isInsert(Student student){
- throw new UnsupportedOperationException();
- }
- }
进行单元测试
为了区分 powermock 与 Easymock 的区别, 我们先采用 EasyMock 测试, 这里先忽略 EasyMock 的用法, 有兴趣的同学可自行去尝试学习.
使用 EasyMock 进行测试
具体代码示例如下:
- @Test
- public void testStudentFinalServiceWithEasyMock(){
- //mock 对象
- StudentFinalDao studentFinalDao = EasyMock.createMock(StudentFinalDao.class);
- Student student = new Student();
- //mock 调用, 默认返回成功
- EasyMock.expect(studentFinalDao.isInsert(student)).andReturn(true);
- EasyMock.replay(studentFinalDao);
- StudentFinalService studentFinalService = new StudentFinalService(studentFinalDao);
- studentFinalService.createStudent(student);
- EasyMock.verify(studentFinalDao);
- }
我们先来运行下这个单元测试, 会发现运行报错, 具体如下图显示:
很明显由于有 final 关键字修饰后, 导致不能让测试成功, 我们可以删除 final 关键再来测试一下, 结果发现, 测试通过.
使用 PowerMock 进行测试
具体代码示例如下:
- package com.rongrong.powermock.mockfinal;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.mockito.Mockito;
- import org.powermock.API.mockito.PowerMockito;
- import org.powermock.core.classloader.annotations.PrepareForTest;
- import org.powermock.modules.junit4.PowerMockRunner;
- /**
- * @author rongrong
- * @version 1.0
- * @date 2019/11/27 22:10
- */
- @RunWith(PowerMockRunner.class)
- @PrepareForTest(StudentFinalDao.class)
- public class TestStudentFinalService {
- @Test
- public void testStudentFinalServiceWithPowerMock(){
- StudentFinalDao studentFinalDao = PowerMockito.mock(StudentFinalDao.class);
- Student student = new Student();
- PowerMockito.when(studentFinalDao.isInsert(student)).thenReturn(true);
- StudentFinalService studentFinalService = new StudentFinalService(studentFinalDao);
- studentFinalService.createStudent(student);
- Mockito.verify(studentFinalDao).isInsert(student);
- }
- }
运行上面的单元测试时, 会发现运行通过!!
来源: https://www.cnblogs.com/longronglang/p/11946208.html