オリジナル住所:https://www.cnblogs.com/swugogo/p/5908435.html
カタログを読みます
>関連ジャーパッケージの紹介
、所望のパッケージを導入する必要
<依存性> <のgroupId> JUnitの</のgroupId> <たartifactId> JUnitの</たartifactId> <バージョン> 3.8.1 </バージョン> <スコープ>テスト</スコープ> </依存> <依存性> <のgroupId> org.springframework </のgroupId> <たartifactId>ばね試験</たartifactId> <バージョン> 3.2.10.RELEASE </バージョン> </依存>
> プロファイルのロード
(A)構成ファイル<オリジナルマニュアルローディング>をロード
コンテキスト= ApplicationContextの新しい新 FileSystemXmlApplicationContext(「ウェブルート/ WEB-INF / applicationContext.xmlを」); 新新 ClassPathXmlApplicationContext(「applicationContext.xmlを」); // クラスパスからロード 新しい新 FileSystemXmlApplicationContext(「クラスパス:アドレス」); // クラスパスを表しませんカレントディレクトリ
(B)方法自動ローディングノート
@ org.springframework.test.context.ContextConfiguration(位置= { "ファイル:WEBROOT / WEB-INF / applicationContext.xmlを" })
@ org.springframework.test.context.ContextConfiguration(位置 = { "クラスパス:applicationContext.xmlを" })
@RunWith(SpringJUnit4ClassRunner。クラス) // junit4試験使用 @ContextConfiguration ({ "/spring/app*.xml","/spring/service/app*.xmlを"})// 設定ファイルをロード // ---以下のコードを追加して、クラスは、この構成に続くすべてのテストクラスを継承する場合---------、それはクラステストするための方法で適用されなくてもよい// /制御トランザクションを、次の例を参照 // これをあなたはこの注釈の設定に参加していない場合は非常に重要な、トランザクション制御を完全に無効になります! // @Transactional // コントローラのコンフィギュレーションファイル(のTransactionManager =「のTransactionManager」)のトランザクションは、つつ、トランザクションに関連付けられ// 自動ロールバック(defaultRollback = true)を指定します。このような操作は、データベースの前にデータを汚染しないでください! // @TransactionConfiguration(トランザクションマネージャー= "のTransactionManager"、trueにdefaultRollback =) //------------ パブリック クラスBaseJunit4Test { }
> オリジナル使い方
あなたは(私はここでは「/config/application*.xml」AM)Spring構成を設定するテストクラスがロードされ、あなたはその後、豆の容器に注入されたことができます。ここでの方法でアノテートされています
パッケージcom.nicchagil.mybatis3spring3intg.junit。 輸入はjava.util.List; 輸入org.junit.Test; 輸入org.junit.runner.RunWith; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.test.context.ContextConfiguration。 輸入org.springframework.test.context.junit4.SpringJUnit4ClassRunner。 輸入com.nicchagil.mybatis3spring3intg.bean.User。 輸入com.nicchagil.mybatis3spring3intg.service.UserService。 @RunWith(SpringJUnit4ClassRunner。クラス) @ContextConfiguration({ "/config/application*.xml" }) 公衆 クラスJunitTest { @Autowired プライベートUserServiceのUserServiceのを。 @Test 公共 ボイドC1(){ リスト <ユーザー> USERLIST = userService.query(新しいユーザー())。 System.out.println(ユーザーリスト)。 } }
特定のテストクラスで、手動で設定ファイルをロードする方法により、JUnitテストである下記有する欠点を。
1)複数の初期Springコンテナの問題が生じます
2)他の豆を取り出すハードコーディングを使用する必要があり、キャストする必要があります
損傷に対して脆弱3)シーンデータベース(理想状態:データベースの自動ロールバックサイトデータベースが破壊されないことを保証するので、テストの問題が発生しない繰り返します)
jdbcTemplateが同じトランザクション内のデータベースへのアクセス権を持っていた、クエリデータを変更、操作の正しさを検証する):4)(理想的な状態は、データ操作の正当性を確認するために便利ではありません
>一般的な使用法
一般的な方法は、パブリックうちの一部の構成をロードすることです:
パッケージcom.nicchagil.mybatis3spring3intg.junit。 輸入org.junit.runner.RunWith; 輸入org.springframework.test.context.ContextConfiguration。 輸入org.springframework.test.context.junit4.SpringJUnit4ClassRunner。 @RunWith(SpringJUnit4ClassRunner。クラス) @ContextConfiguration({ "/config/application*.xml" }) パブリック クラスBaseJunit { }
次に、各テストクラスは、publicクラスを継承する必要があります。
パッケージcom.nicchagil.mybatis3spring3intg.junit; インポートはjava.util.List; インポートorg.junit.Test; インポートorg.springframework.beans.factory.annotation.Autowired; インポートcom.nicchagil.mybatis3spring3intg.bean.User; インポートCOM。 ; nicchagil.mybatis3spring3intg.service.UserService パブリック クラス UserServiceTest 延びBaseJunit { @Autowired プライベート; UserServiceのUserServiceの @Resource //が自動的にデフォルト名で、注入 プライベートIBaseDao BaseDaoと、 @Test // 示す試験法である @Transactional //このメソッドは、トランザクションの使用が示されている必要があり (@Rollback falseにする)// 示されたトランザクションを使用して、この方法が終了した後、バック真のロールされていない場合、ロールバック 公共 ボイドC1(){ 一覧 <ユーザー> USERLIST = userService.query(新しい新しいユーザー()) ; のSystem.out.println(ユーザーリスト); } }
// レビュー:違い@Autowired&@Resource // @Autowired注釈は、種類によって依存オブジェクトを装着している、ヌル値は、それが必要な属性をfalseに設定することができます許可されている場合には、依存オブジェクトが存在していなければならない必要があり、デフォルトで。私たちは名前でアセンブリを使用する場合、それは組み合わせ@Qualifierコメントで一緒に使用することができます。:次のように // @Autowired @Qualifier(「personDaoBean」) // PersonDao PersonDaoプライベート; // @Resource @Autowired注釈などとフィールドまたはプロパティのセッターメソッドにマークすることができるが、それは、デフォルトでは、アセンブリの名前です。名前は、名前で指定することができます注釈がフィールド上にマークなしname属性、依存オブジェクトを探しBean名として扱わデフォルトのフィールド名、注釈のプロパティのセッターメソッドにアノテーションは、すなわち、デフォルトの属性を取っていない場合は@Resource属性依存オブジェクトの名前としてBean名を探しています。 // @Resource(名前=「personDaoBean」) // プライベートPersonDao PersonDao; // フィールドの // 注:あなたは、name属性を指定していない、まだデフォルト名に基づいて依存オブジェクトを見つけることができない、@Resourceアノテーションの場合型アセンブリによってフォールバックします。name属性が指定されると、それは装備名だけです。
例えば:
ツール:RestClientUtil.java
パッケージcom.kszsa.common.rest。 輸入org.springframework.stereotype.Component。 輸入org.springframework.web.client.RestTemplate。 輸入java.util.Map; @Component パブリック クラスRestClientUtil { / ** *调用远程休憩接口 * @paramのURL * @param するClassType * @param paramsは * @param <T> * @return * / 公共 <T> T取得(文字列のURL、クラス<T >するClassType、地図の<string、オブジェクト> のparams){ RestTemplate restTemplate= 新しいRestTemplate()。 返すrestTemplate.getForObject(URL、するClassType、のparams)を、 } }
テストカテゴリ
RestClientUtilTest.java
パッケージcom.kszsa.common.rest。 輸入com.alibaba.fastjson.JSONObject。 輸入org.junit.Test; 輸入org.junit.runner.RunWith; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.test.context.ContextConfiguration。 輸入org.springframework.test.context.junit4.SpringJUnit4ClassRunner。 輸入java.util.HashMapを; 輸入java.util.Map; @RunWith(SpringJUnit4ClassRunner クラス) @ContextConfiguration(位置 = { "クラスパス* / * XML" }) パブリック クラスRestClientUtilTest { @Autowired プライベートRestClientUtil restClientUtil。 @Test 公共 のボイドのget(){ 文字列のURL = "にhttp:// localhost:8080 / ssht /ユーザー/取得ID = {ID}?" 。 地図 <文字列、オブジェクト>マップ= 新しい HashMapの<文字列、オブジェクト> (); map.put( "ID"、2 )。 JSONObject jsonObject = restClientUtil.get(URL、JSONObject。クラス、マップ); System.out.println(jsonObject)。 } }