單元測試程式碼:SpringTest+JUnit
/** * JUnit單元測試父類,配置了Spring的基礎環境。 <br/> * 可以作為Controller、Service、Dao單元測試的父類。 * * @author [email protected] */ public class JUnitTestBase { public static XmlWebApplicationContext context = null; private static HandlerMapping handlerMapping; private static HandlerAdapter handlerAdapter; // /public static String[] CONFIG_FILES = { "classpath:spring-*.xml" }; // public static String[] configs = { "file:src/main/resources/spring-*.xml" // }; public static String[] CONFIG_FILES = { "file:src/main/resources/spring-*.xml" }; /** * 讀取spring配置檔案,初始化上下文。 */ @BeforeClass public static void setUp() { System.out.println("Test start..."); context = new XmlWebApplicationContext(); context.setConfigLocations(CONFIG_FILES); MockServletContext msc = new MockServletContext(); context.setServletContext(msc); context.refresh(); msc.setAttribute( WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context); handlerMapping = (HandlerMapping) context .getBean(DefaultAnnotationHandlerMapping.class); handlerAdapter = (HandlerAdapter) context.getBean(context .getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]); } // 執行request物件請求的action public ModelAndView excuteAction(HttpServletRequest request, HttpServletResponse response) throws Exception { // 這裡需要宣告request的實際型別,否則會報錯 request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true); HandlerExecutionChain chain = handlerMapping.getHandler(request); Object handler = chain.getHandler(); final ModelAndView model = handlerAdapter.handle(request, response, handler); return model; } @AfterClass public static void tearUp() { System.out.println("Test end!"); } } //測試Controller的2種方法 /** * CampaignGroupController單元測試。 * * @author[email protected] */ public class FansUnionControllerTestextends JUnitTestBase { @Test public void prevAddCampaignGroup() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); String requestURI = "/campaignGroup/prevAdd"; request.setRequestURI(requestURI); request.setMethod("POST"); final ModelAndView mav = this.excuteAction(request, response); Assert.assertEquals("createCampaignGroup", mav.getViewName()); } @Test public void prevAddCampaignGroup2() throws Exception { CampaignGroupController userController = context.getBean(CampaignGroupController.class); MockMvc mockMvc = MockMvcBuilders.standaloneSetup(userController) .build(); ResultActions perform = mockMvc.perform(MockMvcRequestBuilders.post("/campaignGroup/prevAdd")); ResultActions andExpect = perform .andExpect(MockMvcResultMatchers.status().is(200)); andExpect .andExpect( MockMvcResultMatchers.view() .name("createCampaignGroup")); } } ----需要配置2個bean,測試Controller需要用到 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> </bean> 測試Service(Dao類似) /** * 這種方式 的單元測試,不需要重複指定 資原始檔,減少重複。 麻煩的地方在於,需要手動獲取bean。 * * @author[email protected] */ public class FansUnionServiceTest extends JUnitTestBase { private static CampaignGroupService campaignGroupService = context .getBean(CampaignGroupService.class); // 測試add,remove,update方法的時候,已經測試了find? @Test public void addCampaignGroup() { CampaignGroup cg = buildOneGroup(); campaignGroupService.add(cg); CampaignGroup dbCampaignGroup = campaignGroupService.find(cg.getId()); Assert.assertEquals(cg, dbCampaignGroup); campaignGroupService.delete(cg.getId()); } 基於註解的測試 /** * * 基於註解的單元測試。 * * @author[email protected] */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:spring-mvc-context.xml", "classpath:spring-common-context.xml" }) public class FansUnionServiceTestWithAnnotation { @Autowired private CampaignGroupService campaignGroupService; /** * 根據campaignId獲取campaignGroup的name集合<br> * 測試場景:<br> * */ @Test public void testListCampaignGroupNameByCampaignId(){ System.out.println("**********"); System.out.println(campaignGroupService.listCampaignGroupNameByCampaignId(1005899)); } }
相關推薦
單元測試程式碼:SpringTest+JUnit
/** * JUnit單元測試父類,配置了Spring的基礎環境。 <br/> * 可以作為Controller、Service、Dao單元測試的父類。 * * @author [email protected] */ public clas
Java單元測試工具:JUnit4——JUnit詳解之執行流程及常用註解
說明: ①testDivide()方法中,將除數設為0,本會丟擲Error,但設定了@Test(expected=ArithmeticException.class),說明我們預期它會丟擲一個算術異常,所以程式結果也符合我們的預期。 ②testWhile()方法是一個死迴圈,
JUnit單元測試程式碼
package com.storage.test; import org.junit.Before; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; i
Java單元測試工具:JUnit4(四)——JUnit測試套件使用及引數化設定
(四)JUnit測試套件使用及引數化設定 這篇筆記記錄JUnit測試套件的使用,即批量執行測試類;以及JUnit中的引數化設定。 @RunWith 當類被
Java單元測試工具:JUnit4(三)——JUnit詳解之執行流程及常用註解
(三)執行流程及常用註解 這篇筆記記錄JUnit測試類執行時,類中方法的執行順序;以及JUnit中常用的註解。 1.JUnit的執行流程 1.1 新建測試類
Java單元測試工具:JUnit4(二)——JUnit使用詳解
(二)JUnit使用注意點及測試失敗的兩種情況 看了慕課網的JUnit視訊教程: http://www.imooc.com/learn/356,總結筆記。 &nbs
Android單元測試(一):JUnit框架的使用
1.前言 網上有許多關於單元測試的好處,這裡我就不去說了。我寫單元測試的理由很簡單粗暴,就是圖一個方便。試想一下這個場景:我們在寫一個新功能,每寫一部分,我們就安裝到手機上檢視一下,這個過程中你要點選到對應的頁面,做對應的操作,最後才能反饋給你結果。如果達到了預
Spring整合JUnit框架進行單元測試程式碼使用詳解
一、Spring提供的JUnit框架擴充套件: 1. AbstractSpringContextTests:spring中使用spring上下文測試的Junit擴充套件類,我們一般不會使用這個類來進行單元測試,它是spring內部設計使用到的類 2. Abs
junit+springMVC單元測試異常:org.apache.shiro.UnavailableSecurityManagerException
使用Mock模擬請求到控制器中丟擲如下異常: org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bo
SpringMVC工程Controller、Service單元測試程式碼
applicationContext.xml 為spring配置檔案 spring-mvc.xml 為springmvc配置檔案 junit4 單元測試DEMO程式碼 import static org.springframework.test.web.servlet.request
IntelliJ IDEA找不到單元測試程式碼覆蓋率預設工具,沒有Coverage選項卡
1、我們使用Java開發工具IntelliJ IDEA,有時候使用單元測試工具Junit後,要進行程式碼覆蓋率報告輸出,可使用IDEA自帶的程式碼覆蓋率工具,直接測試類名右鍵Run ‘MyClassTest’ with Coverage或工具欄上的選項執行特定模式的測試,如下 2、但是發現
VS2015 單元測試程式碼覆蓋率
VS單元測試執行覆蓋率檢查,報錯如下: Empty results generated: No binaries were instrumented. Make sure the tests ran, required binaries were loaded, had m
python的單元測試程式碼編寫流程
單元測試: 單元測試是對單獨的程式碼塊分別進行測試, 以確保它們的正確性, 單元測試主要還是由開發人員來做, 其餘的整合測試和系統測試由專業的測試人員來做. python的單元測試程式碼編寫主要記住以下幾點: 1. 需要匯入 unittest模組 2. 需要繼承自 unittest.TestCas
Java單元測試工具:JUnit4(一)——概述及簡單例子
(一)JUnit概述及一個簡單例子 看了慕課網的JUnit視訊教程: http://www.imooc.com/learn/356,總結筆記。 這篇筆記記錄JUnit的
Android單元測試(五):網路介面測試
溫馨提示:如果你不太熟悉單元測試,可以先看下之前四篇基礎框架使用。便於你更好的理解下面的內容。 在平日的開發中,我們用後臺寫好給我們介面去獲取資料。雖然我們有一些請求介面的工具,可以快速的拿到返回資料。但是在一些異常情況的處理上就不太方便了。我列出以下
C++單元測試一:並非看上去那麼簡單——幾個很實際的問題
理想與現實 為Java和C#做單元測試,基本上都有比較統一的工具、模式可用,IDE的支援也非常到位;可是到了C++這裡,一切就變的那樣的“不走尋常路”,各種單元測試框架盛行,例如CppUnit, CppUnitLite, CxxUnit,Google Test等等,以及微軟
如何編寫單元測試程式碼
如何編寫
用JUnit4進行單元測試程式碼編寫
JUnit4簡介 Junit是一個可編寫重複測試的簡單框架,是基於Xunit架構的單元測試框架的例項。JUnit4是JUnit框架有史以來的最大改進,其主要目標便是利用JDK 5的Annotation特性簡化測試用例的編寫。JDK 5裡可以靜態匯入,例如imp
C++單元測試二:何時Mock及其是與非
什麼時候需要mock 在前面一部分(C++單元測試一:並非看上去那麼簡單——幾個很實際的問題),我遇到的問題是:一個單元測試工程只能測一個被測類(其實前文的後記部分也已指出,其實建立新工程也不是特別必要,可以讓Mock類從被測類繼承,但問題是這是真的Mock嗎?); 那麼,
Android單元測試(九):查漏補缺篇
最近抽時間檢查了一下年前有關單元測試的八篇部落格,查漏補缺了一下。後面如果有更多關於單元測試的心得收穫,也會繼續補充。 1.AssertJ 在Android單元測試(一):JUnit框架的使用中,我們介紹瞭如何使用JUnit來進行斷言。不多說實話