PowerMock學習(六)之Mock Final的使用
阿新 • • 發佈:2019-11-28
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); } }
執行上面的單元測試時,會發現執行通過