PowerMock學習(六)之Mock Final的使用
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); } }
運行上面的單元測試時,會發現運行通過!!
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】
※為什麼 USB CONNECTOR 是電子產業重要的元件?
※收購3c,收購IPHONE,收購蘋果電腦-詳細收購流程一覽表
※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!
※想要讓你的商品在網路上成為最夯、最多人討論的話題?
※高價收購3C產品,價格不怕你比較
※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!