Junit 4学習ノート

19399 ワード

  • Junit 4注記
  • @Testが注記される方法はテスト方法です.
    @Test注記のpublic voidメソッドは、テスト例としてJUnitが毎回新しいテストインスタンスを作成し、@Test注記メソッドを呼び出して異常な投げ出しはいずれもテストに失敗したと判断します@Test注記は2つのパラメータを提供します:“expected”、テストメソッドが投げ出すべき異常を定義します.テストメソッドが異常を投げ出さなかったり、異なる異常を投げ出したりした場合、テストに失敗しました「timeout」.テストの実行時間が定義時間より長い場合、テストに失敗しました(ミリ秒単位)
    @BeforeClass
    注記された(静的)メソッドは、現在のクラス内のすべての@Testメソッドの前に1回実行されます.
    @BeforeClassを使用してpublic static voidメソッドを注釈します.このメソッドにはパラメータはありません.このメソッドは、すべてのテストメソッドが実行される前に1回実行され、親クラスの@BeforeClass注釈メソッドは、子クラスの@BeforeClass注釈メソッドが実行される前に1回のみ実行されます.
    @Beforeが注記されたメソッドは、現在のクラスの各@Testメソッドの前に実行されます.
    @Before注記を使用するpublic voidメソッドを使用すると、@Test注記メソッドが実行される前に親の@Before注記メソッドが子の@Before注記メソッドが実行される前に実行されます.
    @Afterが注記されたメソッドは、現在のクラスの各@Testメソッドの後に実行されます.
    @Before注記メソッドに追加のリソースが割り当てられている場合は、テストの実行後、割り当てられたリソースを解放する必要があります.@After注記を使用するpublic voidメソッドは、@Test注記メソッドの実行後に実行されます.@Before注記メソッド、@Test注記メソッドで例外が投げ出されても、すべての@After注記メソッドは親クラスの@After注記メソッドが実行されます.サブクラス@After注記メソッドの実行後に実行されます.
    @AfterClassが注記された(静的)メソッドは、現在のクラスのすべての@Testメソッドの後に1回実行されます.
    @BeforeClass注記メソッドに高価な追加リソースが割り当てられている場合は、テストクラス内のすべてのテストメソッドが実行された後、割り当てられたリソースを解放する必要があります.@AfterClass注記を使用するpublic static voidメソッドは、テストクラス内のすべてのテストメソッドが実行された後に実行されます@BeforeClass注記メソッドに例外が投げ出されても、すべての@AfterClass注記メソッドは親クラスの@AfterClass注記メソッドが実行され、子クラス@AfterClass注記メソッドが実行された後に実行されます.
    @Ignoreで注記されたメソッドは実行されません(スキップされます)が、実行されたと報告されます.
    テストクラスを含むクラスまたは@Test注記メソッドに@Ignore注記を使用すると、注記されたクラスまたはメソッドがテスト実行JUnit実行結果に無視されたテスト数がレポートされないようになります.
  • 共通API
  • MockMvcRequestBuilders
    MockHttpServletRequestBuilder   get(String urlTemplate, Object... urlVariables)

    uriテンプレートとuri変数に基づいてGET要求方式のMockHttpServertRequestBuilderに値する.例えばget(/user/{id},1 L);
    MockHttpServletRequestBuilder   post(String urlTemplate, Object... urlVariables)

    getと似ていますが、POSTメソッドです.
    MockHttpServletRequestBuilderput(String urlTemplate, Object... urlVariables)

    getと似ていますが、PUTメソッドです.
    MockHttpServletRequestBuilder   delete(String urlTemplate, Object... urlVariables) 

    getと似ていますが、DELETEメソッドです.
    MockHttpServletRequestBuilder   options(String urlTemplate, Object... urlVariables)

    getと似ていますが、OPTIONSメソッドです.
    MockHttpServletRequestBuilder   request(HttpMethod httpMethod, String urlTemplate, Object... urlVariables)

    自分のHttp要求方法とuriテンプレートとuri変数を提供し、上述のAPIはすべてこのAPIに委託している.
    RequestBuilder asyncDispatch(final MvcResult mvcResult)

    非同期処理を開始する要求のMvcResultから非同期割り当てを行うRequestBuilderを作成します.
    MockMultipartHttpServletRequestBuilder   fileUpload(String urlTemplate, Object... urlVariables)

    ファイルアップロード方式の要求を提供し、MockMultipartHttpServiceletRequestBuilderを得る.
  • MockHttpServletRequestBuilder
  • MockHttpServletRequestBuilder   header(String name, Object... values)
    MockHttpServletRequestBuilder   headers(HttpHeaders httpHeaders)

    ヘッダ情報を追加します.
    MockHttpServletRequestBuilder   contentType(MediaType mediaType)

    要求されたcontentTypeヘッダ情報を指定します.
    MockHttpServletRequestBuilder   accept(MediaType... mediaTypes)
    MockHttpServletRequestBuilder   accept(String... mediaTypes)

    要求されたAcceptヘッダ情報を指定します.
    MockHttpServletRequestBuilder content(byte[] content)
    MockHttpServletRequestBuilder content(String content)

    要求ボディの内容を指定します.
    MockHttpServletRequestBuilder cookie(Cookie... cookies)

    リクエストのCookieを指定します.
    MockHttpServletRequestBuilder locale(Locale locale)

    要求されたLocaleを指定します.
    MockHttpServletRequestBuilder characterEncoding(String encoding)

    要求文字符号化を指定します.
    MockHttpServletRequestBuilder requestAttr(String name, Object value)

    要求属性データを設定する.
    MockHttpServletRequestBuilder sessionAttr(String name, Object value)
    MockHttpServletRequestBuilder sessionAttrs(Map<String, Object> sessionAttributes)

    リクエストセッション属性データを設定します.
    MockHttpServletRequestBuilder flashAttr(String name, Object value)
    MockHttpServletRequestBuilder flashAttrs(Map<string, object=""> flashAttributes)

    リダイレクト後のプロパティ情報など、リクエストされたflash情報を指定します.
    MockHttpServletRequestBuilder session(MockHttpSession session) 

    リクエストのセッションを指定します.
    MockHttpServletRequestBuilder principal(Principal principal) 

    要求のPrincipalを指定します.
    MockHttpServletRequestBuilder contextPath(String contextPath) 

    要求のコンテキストパスを指定します.「/」で始まる必要があり、「/」で終わることはできません.
    MockHttpServletRequestBuilder pathInfo(String pathInfo) 

    要求されたパス情報は、"/"で始まる必要があります.
    MockHttpServletRequestBuilder secure(boolean secure)

    安全なチャネルを使用するかどうかを要求します.
    MockHttpServletRequestBuilder with(RequestPostProcessor postProcessor)

    要求されたポストプロセッサは、いくつかの要求処理の拡張点をカスタマイズするために使用されます.
  • MockMultipartHttpServletRequestBuilder

  • MockM u l t i p artHttpServiceRequestBuilderは、MockHttpServiceRequestBuilderを継承し、次のAPIも提供します.
    MockMultipartHttpServletRequestBuilder file(String name, byte[] content)
    MockMultipartHttpServletRequestBuilder file(MockMultipartFile file)

    アップロードするファイルを指定します.
  • ResultActions

  • MockMvc.perform(RequestBuilder requestBuilder)を呼び出すとResultActionsが得られ、ResultActionsによって次の3つのことが完了します.ResultActions andExpect(ResultMatcher):検証断言を追加して要求を実行した結果が予想されたかどうかを判断します.
    ResultActions andDo(ResultHandler handler) 

    検証に成功した後に実行される動作、例えばデバッグのために要求/結果情報を出力する結果プロセッサを追加します.
    MvcResult andReturn() 

    検証に成功したMvcResultを返します.認証/次のステップをカスタマイズするための非同期処理.
  • ResultMatcher/MockMvcResultMatchers

  • ResultMatcherは、要求の実行後の結果検証に一致するために使用され、マッチングに失敗すると対応する例外が投げ出されるmatch(MvcResult result)断言方法について使用される.Spring mvcテストフレームワークは、テスト要件を満たすために多くの***ResultMatchersを提供します.これらの***ResultMatchersはResultMatcherのサブクラスではなく、ResultMatcherインスタンスを返します.Spring mvcテストフレームワークはテストの便利さのためにMockMvcResultMatchers静的工場方法の便利な操作を提供した.
    具体的なAPIは以下の通りである.
    HandlerResultMatchers handler()

    プロセッサタイプ/メソッド名の検証など、要求されたHandlerベリファイア.ここのHandlerは実は要求を処理するコントローラです.
    RequestResultMatchers request()

    RequestResultMatchersベリファイアを取得します.
    ModelResultMatchers model()

    モデル検証器を得る.
    ViewResultMatchers view()

    ビュー検証器を取得する.
    FlashAttributeResultMatchers flash()

    Flashプロパティの検証を取得します.
    StatusResultMatchers status()

    応答状態検証器を得る.
    HeaderResultMatchers header()

    応答Headerベリファイアを得る;
    CookieResultMatchers cookie()

    応答Cookie検証器を得る;
    ContentResultMatchers content()

    応答コンテンツ検証器を得る.
    JsonPathResultMatchers jsonPath(String expression, Object ... args)
    ResultMatcher jsonPath(String expression, Matcher matcher)

    Json式検証器を得る.
    XpathResultMatchers xpath(String expression, Object... args) 
    XpathResultMatchers xpath(String expression, Map<String, String> namespaces, Object... args)

    Xpath式検証器を得る.
    ResultMatcher forwardedUrl(final String expectedUrl)

    要求処理後に転送されたurl(絶対一致)を検証する.
    ResultMatcher forwardedUrlPattern(final String urlPattern)

    要求処理後に転送されたurl(Antスタイルパターンマッチング,@since spring 4)を検証する.
    ResultMatcher redirectedUrl(final String expectedUrl)

    リクエストの処理後にリダイレクトされたurl(絶対一致)を検証します.
    ResultMatcher redirectedUrlPattern(final String expectedUrl)

    要求処理後にリダイレクトされたurl(Antスタイルパターンマッチング,@since spring 4)を検証する.
  • 共通テスト
  • 通常コントローラのテスト
    mockMvc.perform(get("/user/{id}", 1)) //      
                .andExpect(model().attributeExists("user")) //          
                .andExpect(view().name("user/view")) //  viewName  
                .andExpect(forwardedUrl("/WEB-INF/jsp/user/view.jsp"))//       forward  jsp  
                .andExpect(status().isOk())//       
                .andDo(print()); //  MvcResult    
      MvcResult     
    MvcResult result = mockMvc.perform(get("/user/{id}", 1))//      
            .andReturn(); //  MvcResult  
    Assert.assertNotNull(result.getModelAndView().getModel().get("user")); //        

    検証要求パラメータがモデルデータおよびFlash属性にバインドされている
    mockMvc.perform(post("/user").param("name", "zhang")) //       POST  (   post("/user?name=zhang"))  
                .andExpect(handler().handlerType(UserController.class)) //            
                .andExpect(handler().methodName("create")) //             
                .andExpect(model().hasNoErrors()) //          
                .andExpect(flash().attributeExists("success")) //    flash    
                .andExpect(view().name("redirect:/user")); //     

    ファイルのアップロード
    byte[] bytes = new byte[] {1, 2};  
    mockMvc.perform(fileUpload("/user/{id}/icon", 1L).file("icon", bytes)) //        
            .andExpect(model().attribute("icon", bytes)) //         
            .andExpect(view().name("success")); //      
    

    JSON要求/応答検証
    String requestBody = "{\"id\":1, \"name\":\"zhang\"}";  
        mockMvc.perform(post("/user")  
                .contentType(MediaType.APPLICATION_JSON).content(requestBody)  
                .accept(MediaType.APPLICATION_JSON)) //      
                .andExpect(content().contentType(MediaType.APPLICATION_JSON)) //    contentType  
                .andExpect(jsonPath("$.id").value(1)); //  Json path  JSON    http://goessner.net/articles/JsonPath/  
    
        String errorBody = "{id:1, name:zhang}";  
        MvcResult result = mockMvc.perform(post("/user")  
                .contentType(MediaType.APPLICATION_JSON).content(errorBody)  
                .accept(MediaType.APPLICATION_JSON)) //      
                .andExpect(status().isBadRequest()) //400      
                .andReturn();  
    
        Assert.assertTrue(HttpMessageNotReadableException.class.isAssignableFrom(result.getResolvedException().getClass()));//        

    非同期テスト
     //Callable  
        MvcResult result = mockMvc.perform(get("/user/async1?id=1&name=zhang")) //      
                .andExpect(request().asyncStarted())  
                .andExpect(request().asyncResult(CoreMatchers.instanceOf(User.class))) //    10     
                .andReturn();  
    
        mockMvc.perform(asyncDispatch(result))  
                .andExpect(status().isOk())  
                .andExpect(content().contentType(MediaType.APPLICATION_JSON))  
                .andExpect(jsonPath("$.id").value(1));  

    グローバル構成
    mockMvc = webAppContextSetup(wac)  
                .defaultRequest(get("/user/1").requestAttr("default", true)) //         Mergeable   ,     mockMvc.perform  RequestBuilder  
                .alwaysDo(print())  //                
                .alwaysExpect(request().attribute("default", true)) //                
                .build();  
    
        mockMvc.perform(get("/user/1"))  
                .andExpect(model().attributeExists("user"));