1. 程式人生 > >java測試註解(@RunWith(value = SpringJUnit4ClassRunner.class) )

java測試註解(@RunWith(value = SpringJUnit4ClassRunner.class) )

轉自:http://blog.csdn.net/generalyy0/article/details/6955752

知識點一:

@Transactional//預設只有runtime(執行時)異常回滾
@Transactional(rollbackFor = Exception.class)//表示丟擲Exception異常後,回滾

知識點二:

在測試類裡測試時需要用到的註解:

注:測試一定要保證:方法裡的每一種情況到被測試到,也就是程式碼的覆蓋率達到100%。

package com.security.test.service;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

import org.apache.commons.beanutils.BeanUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.GenericXmlContextLoader;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

import com.cgodo.mvc.service.Result;
import com.security.entity.SecurityPermission;
import com.security.model.AddSecurityPermissionModel;
import com.security.model.UpdateSecurityPermissionModel;
import com.security.service.SecurityPermissionI;

/**
 * 
 * 許可權服務層測試類
 * 
 * @author 鬱永 [email protected]


 * @version 1.0
 * @since 2011-11-9 下午06:45:09
 */

//測試時需要的

@RunWith(value = SpringJUnit4ClassRunner.class) //在使用所有註釋前必須使用@RunWith(SpringJUnit4ClassRunner.class),讓測試運行於Spring測試環境
@ContextConfiguration(locations = {"classpath:/com/security/resource/spring/context/application/applicationContext.xml"} , loader = GenericXmlContextLoader.class)

@ContextConfiguration 註解有以下兩個常用的屬性:locations:可以通過該屬性手工指定 Spring 配置檔案所在的位置,可以指定一個或多個 Spring 配置檔案用,分開。如下所示: @ContextConfiguration(locations={“aa/aa.xml”,” aa/bb.xml”})

inheritLocations:是否要繼承父測試用例類中的 Spring 配置檔案,預設為 true。】

@DirtiesContext(classMode = ClassMode.AFTER_CLASS)  //@DirtiesContext 在測試方法上出現這個註解時,表明底層Spring容器在該方法的執行中被“汙染”,從而必須在方法執行結束後重新建立(無論該測試是否通過)。


@TransactionConfiguration( transactionManager = "transactionManager" , defaultRollback = false) //【@TransactionConfiguration 為配置事務性測試定義了類級別的元資料。PlatformTransactionManager預設的例項叫transactionManager, 如果需要的PlatformTransactionManager不是“transactionManager”的話,那麼可以顯式配置驅動事務的PlatformTransactionManager的bean的名字。此外, 可以將defaultRollback標誌改為false,表示不回滾。通常, @TransactionConfiguration與@ContextConfiguration搭配使用。

@ContextConfiguration
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=false)】

@Transactional //開啟類級別的事物
public class TestSecurityPermissionService {

//註解生成SecurityPermissionI 的代理
 @Autowired
 SecurityPermissionI securityPermissionI;
  
 /**
  * 描述:初始化測試資料
  * @throws InvocationTargetException 
  * @throws IllegalAccessException 
  */
 @Before
 public void before() throws IllegalAccessException, InvocationTargetException{
  //新增刪除測試資料
  SecurityPermission securityPermissionDelete = new SecurityPermission();
  securityPermissionDelete.setPermissionId("TEST_permissionId-Delete");
  securityPermissionDelete.setPermissionDescription("TEST_許可權描述資訊-Delete");
  securityPermissionDelete.setPermissionType("TEST_許可權型別-Delete");
  Result<List<SecurityPermission>> resultDelete = securityPermissionI.getPermissionsByType(securityPermissionDelete);
  
  AddSecurityPermissionModel addSecurityPermissionModelDelete = new AddSecurityPermissionModel();
  BeanUtils.copyProperties(addSecurityPermissionModelDelete, securityPermissionDelete);
  if(resultDelete.getData() == null){
   securityPermissionI.addPermission(addSecurityPermissionModelDelete);
  }
  
  //新增刪除測試資料
  SecurityPermission securityPermissionDeleteNot = new SecurityPermission();
  securityPermissionDeleteNot.setPermissionId("TEST_permissionId-DeleteNot");
  securityPermissionDeleteNot.setPermissionDescription("TEST_許可權描述資訊-DeleteNot");
  securityPermissionDeleteNot.setPermissionType("TEST_許可權型別-DeleteNot");
  Result<List<SecurityPermission>> resultDeleteNot = securityPermissionI.getPermissionsByType(securityPermissionDeleteNot);
  
  AddSecurityPermissionModel addSecurityPermissionModelDeleteNot = new AddSecurityPermissionModel();
  BeanUtils.copyProperties(addSecurityPermissionModelDeleteNot, securityPermissionDeleteNot);
  if(resultDeleteNot.getData() == null){
   securityPermissionI.addPermission(addSecurityPermissionModelDeleteNot);
  }
  
  
  
  //新增更新測試資料
  SecurityPermission securityPermissionUpdate = new SecurityPermission();
  securityPermissionUpdate.setPermissionId("TEST_permissionId-Update");
  securityPermissionUpdate.setPermissionDescription("TEST_許可權描述資訊-Update");
  securityPermissionUpdate.setPermissionType("TEST_許可權型別-Update");
  Result<List<SecurityPermission>> resultUpdate = securityPermissionI.getPermissionsByType(securityPermissionUpdate);
  
  AddSecurityPermissionModel addSecurityPermissionModelUpdate = new AddSecurityPermissionModel();
  BeanUtils.copyProperties(addSecurityPermissionModelUpdate, securityPermissionUpdate);
  if(resultUpdate.getData() == null){
   securityPermissionI.addPermission(addSecurityPermissionModelUpdate);
  }
  
  //新增查詢測試資料
  SecurityPermission securityPermissionSelect = new SecurityPermission();
  securityPermissionSelect.setPermissionId("TEST_permissionId-Select");
  securityPermissionSelect.setPermissionDescription("TEST_許可權描述資訊-Select");
  securityPermissionSelect.setPermissionType("TEST_許可權型別-Select");
  Result<List<SecurityPermission>> resultSelect = securityPermissionI.getPermissionsByType(securityPermissionSelect);

  AddSecurityPermissionModel addSecurityPermissionModelSelect = new AddSecurityPermissionModel();
  BeanUtils.copyProperties(addSecurityPermissionModelSelect, securityPermissionSelect);
  if(resultSelect.getData() == null){
   securityPermissionI.addPermission(addSecurityPermissionModelSelect);
  }
  
 }
 
//@Test 這個將不會被測試
 public void Test(){
  boolean bb = false;
  Assert.assertFalse(bb);
 }

 @Rollback(true)//設定測試後回滾
 @Transactional//為方法開啟事物
 @Test //標註要測試的方法,不新增@Test將不會進行測試
 public void TestAddPermission(){
  SecurityPermission securityPermission = new SecurityPermission();
  securityPermission.setPermissionId("TEST_permissionId-Add");
  securityPermission.setPermissionDescription("TEST_許可權描述資訊-Add");
  securityPermission.setPermissionType("TEST_許可權型別-Add");
  
  AddSecurityPermissionModel model = new AddSecurityPermissionModel();
  try {
   BeanUtils.copyProperties(model, securityPermission);
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  //測試許可權不存在的情況
  Result isNotExists;
  try {
   isNotExists = securityPermissionI.addPermission(model);

   Assert.assertTrue(isNotExists.isSuccess());
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  //測試許可權已存在的情況
  Result isExists;
  try {
   isExists = securityPermissionI.addPermission(model);
   Assert.assertFalse(isExists.isSuccess());
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
  }

相關推薦

java測試註解(@RunWith(value = SpringJUnit4ClassRunner.class) )

轉自:http://blog.csdn.net/generalyy0/article/details/6955752 知識點一: @Transactional//預設只有runtime(執行時)異常回滾 @Transactional(rollbackFor = Excep

SSM配置中單元測試註解@Runwith遇到的坑

@Runwith測試單元類報錯,導包無效 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations ={"classpath:applicationContext.xml"}) public

Spring Junit測試找不到SpringJUnit4ClassRunner.class

目錄 一、問題描述 1.當使用Junit指定啟動類為SpringJUnit4ClassRunner.class,發現SpringJUnit4ClassRunner.class找不到 2.

使用@RunWith(SpringJUnit4ClassRunner.class)進行單元測試時 報錯 和 java.lang.NoSuchMethodError的解決方法

1 使用@RunWith(SpringJUnit4ClassRunner.class)進行單元測試時,需要junit高版本和spring-test的高版本才支援,junit需要4.0以上的,spring-test也需要高版本,最開始我用的4.3.13的,翻開jar包發現並沒有

Java測試class="__cf_email__" data-cfemail="ecc1be899f98b889819c808d9889c1ac9e899d99899f98ae838895">[email pro

在java的test程式碼中,如果遇到了要傳入@requestBody宣告的引數時,可以使用以下程式碼 String infra = "{\"upperId\":110000,\"areaName\":\"測試BaseArea\",\"remark\":\"備註\"}"; HttpHea

java註解例子,使用反射做測試

上一篇部落格中講解了java中註解如何工作的,這章主要講解自定義註解的例子。 此例子中有三個檔案User.java、FieldAnnotation.java、FieldAnnotationTest.j

Spring中使用@RunWith整合的測試註解

例如: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:aop/applicat

@RunWith(SpringJUnit4ClassRunner.class)報錯

使用Spring測試框架測試DAO設計模式時,加入如下語句時報錯: @RunWith(SpringJUnit4ClassRunner.class) // 此句報錯 @ContextConfigu

@RunWith(Parameterized.class)和@RunWith(SpringJUnit4ClassRunner.class)

就如標題如果你既希望載入SpringContext跑整合測試,同時又希望使用JUnit的引數化方法跑基於資料的測試,該怎麼辦?@RunWith只允許你傳入一個Class型別。 下面是一個Spring官方例子告訴你怎麼實現: /* * Copyright 2002-20

基於NACOS和JAVA反射機制動態更新JAVA靜態常量非@Value註解

1.前言 專案中都會使用常量類檔案, 這些值如果需要變動需要重新提交程式碼,或者基於@Value註解實現動態重新整理, 如果常量太多也是很麻煩; 那麼 能不能有更加簡便的實現方式呢? 本文講述的方式是, 一個JAVA類對應NACOS中的一個配置檔案,優先使用nacos中的配置,不配置則使用程式中的預設值; 2

Java測試工具使用(1)--Junit

所有 alt 命名 浪費 依然 之前 pan 時報 新建 在進行測試之前需要導入junit的兩個包,分別是   junit:4.12;hamcrest-core:1.1 1、基本測試標簽 [email protected]/* */@[email pr

java-測試開發字符串

bst 新的 beautiful stat 測試 dem efi main highlight package j2se; public class StringDemo { private String demoString="ceshixiaoyouning";

java註解的使用與實例(一)

title 編譯器 new ng2 警告 元素 epc 目前 而且 http://www.cnblogs.com/pepcod/archive/2013/02/16/2913474.html 註解目前非常的流行,很多主流框架都支持註解,而且自己編寫代碼的時候也會盡量的去用註

java註解

繼承 但是 枚舉值 cnblogs 無效 文檔 oid -type crazy http://www.jb51.net/article/55371.htm http://www.cnblogs.com/peida/archive/2013/04/24/3036689.htm

Eclipse4.4 安裝java反編譯插件Eclipse Class Decompiler

模式 編輯 多個 位置 trac 存在 eat 依賴 debug 一、在線安裝方式: Eclipse Class Decompiler整合了眼下最好的2個Java反編譯工具Jad和JD-Core,而且和Eclipse Class View

深入理解Java註解(Annotation)--註解處理器

fault this urn 復制代碼 lena ide set java lec 深入理解Java:註解(Annotation)--註解處理器   如果沒有用來讀取註解的方法和工作,那麽註解也就不會比註釋更有用處了。使用註解的過程中,很重要的一部分就是創建於

自學Java測試代碼

wan 二維數組 ted eth args bin -- pac blog 2017-08-22 21:23:37、 writer:pprp package test; public class helloWorld { int maxn = 123;

java測試】Junit、Mock+代碼覆蓋率

tput 活性 插件 報告 tsa println doc 彈出 exe 原文見此處 單元測試是編寫測試代碼,用來檢測特定的、明確的、細顆粒的功能。單元測試並不一定保證程序功能是正確的,更不保證整體業務是準備的。 單元測試不僅僅用來保證當前代碼的正確性,更重要的是用來保證代

基於java容器註解---基於泛型的自動裝配

ges ger 配置 技術分享 config -1 blog clas bean 上面利用@Configuration和@Bean配置bean,中間利用@Autowired,指定s1和s2分別指向哪個實現類,下面利用@Autowired,指定s中只有Integer實現類

深入理解Java註解

註釋 element 每一個 gree arc res 參數名稱 生命周期 水果 註解作用:每當你創建描述符性質的類或者接口時,一旦其中包含重復性的工作,就可以考慮使用註解來簡化與自動化該過程。 Java提供了四種元註解,專門負責新註解的創建工作。‘ 元註解