SpringMVCでは、一般的なテストケースがサービスレイヤーをテストしています。今日は、SpringMVCモックを使用してコントローラーレイヤーコードを直接テストする方法を示します。
1.モックテストとは何ですか?
モックテストは、仮想オブジェクトを使用して、テストプロセス中に構築または取得しやすい特定のオブジェクトのテスト用に作成するテスト方法です。
2.なぜモックテストを使用するのですか?
モックオブジェクトを使用したテストは、主にアプリケーションで構築するのが容易ではないツール(httpservletrequestなどをサーブレットコンテナで構築する必要がある)または比較的複雑なオブジェクト(JDBCの結果セットオブジェクトなど)をスムーズにするためにシミュレートするために使用されます。
3。一般的な注釈
runwith(springjunit4classrunner.class):ユニットテストにスプリングテストコンポーネントを使用することを意味します。
WebAppConfiguration:このアノテーションを使用すると、ユニットテストを実行するときにWebサービスが有効になり、コントローラーのREST APIの呼び出しを開始し、ユニットテストが完了したらWebサービスを停止します。
ContextConfiguration:Beanの構成ファイル情報を指定するには多くの方法があります。この例では、ファイルパスフォームを使用します。複数の構成ファイルがある場合、括弧内の情報を、それを表すために文字列配列として構成できます。
4.テスト環境をインストールします
Spring MVCテストフレームワークは、Web環境テストの独立と統合の2つの方法を提供します(この方法は、実際のWeb環境を統合するのではなく、サーバーを起動せずに対応するMock APIをシミュレートおよびテストします)。
独立したインストールテスト方法
mockmvcbuilders.standalonesetup(object ... controllers):パラメーターを介してコントローラーのセットを指定して、コンテキストから取得する必要がないようにします。
2つの主な手順があります。
(1)最初に対応するコントローラーを自分で作成し、対応する依存関係を挿入します
(2)mockmvcbuilders.standalonesetupを介してMVCテスト環境をシミュレートし、ビルドを通じてmockmvcを取得します
コードは次のとおりです。
パッケージcom.xfs.test; import org.junit.assert; import org.junit.before; import org.junit.test; import org.springframework.test.web.servlet.mockmvc; Import org.springframework.test.test.web.servlet.request.mockmvcrequestbuilders; springframework.test.web.servlet.result.mockmvcresulthandlers; Import org.springframework.test.web.servlet.result.mockmvcresultmatchers; Import org.springframework.test.test.web.servleteup.mockmvcbuilers; com.alibaba.fastjson.json; import com.alibaba.fastjson.jsonobject; Import com.xfs.web.controller.apicontroller;/** *独立したインストールテスト方法SpringMVCモックテスト * @before public void setup(){apicontroller apicontroller = new Apicontroller(); mockmvc = mockmvcbuilders.standalonesetup(apicontroller).build(); } @test public void testgetSequence(){try {mvcresult mvcresult = mockmvc.perform(mockmvcrequestbuilders.post( "/api/get sequence"))。 .andReturn(); int status = mvcresult.getResponse()。getStatus(); System.out.println( "要求ステータスコード:" +ステータス);文字列result = mvcresult.getResponse()。getContentAsstring(); system.out.println( "インターフェイスは結果を返します:" + result); jsonObject resultObj = json.parseObject(result); //インターフェイスの成功フィールドがJSONに戻るかどうかを判断します。 } catch(Exception e){e.printstacktrace(); }}}要求の結果は次のとおりです。
統合されたWeb環境
mockmvcbuilders.webappContextSetup(webApplicationContextコンテキスト):WebApplicationContextを指定すると、対応するコントローラーがコンテキストから取得され、対応するmockmvcが取得されます。
3つの主な手順があります。
(1)@WebAppConfiguration:テスト環境で使用されます。つまり、テスト環境で使用されるアプリケーションコンテキストは、webApplicationContextのタイプになります。値は、Webアプリケーションのルートを指定します。
(2)@autowired webapplicationcontext wac:applicationcontextコンテナがWeb環境に注入された
(3)テスト用のmockmvcbuilders.webappcontextsetup(wac).build()を介してmockmvcを作成します
コードは次のとおりです。
package com.xfs.test;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.mock.web.MockHttpSession;import org.springframework.test.context.contextconfiguration; Import org.springframework.test.context.junit4.abstractjunit4springcontexttests; Import org.springframework.test.context.web.webconfiguration; Import; org.springframework.web.servlet.mockmvc; Import org.springframework.test.web.servlet.request.mockmvcrequestbuilders; import org.springframework.web.servlet.Result.mockmvcresulthandlers; org.springframework.web.servlet.result.mockmvcresultmatchers; Import org.springframework.test.web.servlet.setup.mockmvcbuilders; Import org.springframework.web.web.context.webapplicationcontext com.alibaba.fastjson.jsonobject;/** *統合されたWeb環境メソッドSpringmvc Mock Test * * @Author Admin * * 2017年11月23日11:12:43 AM */@runwith(junit4classrunner.class)@webAppConfiguration@ContextConfigations = {spring *: "classpatter *:" classpatt AbstractJunit4SpringContextTests {@autowired public webApplicationContext wac; Public Mockmvc mockmvc; Public Mockhttpsessionセッション。 @before public void before()throws exception {mockmvc = mockmvcbuilders.webappcontextsetup(wac).build(); } @test public void testgetSequence(){try {mvcresult mvcresult = mockmvc.perform(mockmvcrequestbuilders.post( "/api/get sequence"))。 .andReturn(); int status = mvcresult.getResponse()。getStatus(); System.out.println( "要求ステータスコード:" +ステータス);文字列result = mvcresult.getResponse()。getContentAsstring(); system.out.println( "インターフェイスは結果を返します:" + result); jsonObject resultObj = json.parseObject(result); //インターフェイスの成功フィールドがJSONを返すかどうかを判断します。JSONはtrue assert.asserttrue(resultobj.getbooleanvalue( "success")); } catch(Exception e){e.printstacktrace(); }}}実行の結果は、上記の独立したテストの結果と同じです。
要約:
プロセス全体:
1。MOCKMVC.PERFORMはリクエストを実行します。
2。MOCKMVCREQUESTBUILDERS.GET( "/user/1")リクエストを作成します
3。results.andexpectは、実行後にアサーションを追加します
4。resultions.anddoは、結果プロセッサを追加して、結果をどうするかを示します。たとえば、mockmvcresulthandlers.print()を使用して、応答結果情報全体を出力します。
5。結果として、およびReturnとは、実行が完了した後に対応する結果が返されることを意味します。
テストプロセス全体が非常に規則的です:
1。テスト環境に向けて準備します
2。mockmvcを介してリクエストを実行します
3.検証アサーションを追加します
4.結果プロセッサを追加します
5.カスタムアサーションのためにmvcresultを入手する/次の非同期リクエストを行う
6.テスト環境をアンインストールします
参照:Spring-MVC-Testフレームワーク
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。