1. 程式人生 > >單元測試程式碼:SpringTest+JUnit

單元測試程式碼: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來進行斷言。不多說實話