봄 부팅 RESTfuldemo 테스트 클래스

편안하고 아키텍처는 "자원"(자원)의 핵심 개념이다. 편안하고 네트워크 자원의 관점 아무것도이다에서, 그 텍스트의 일부가 될 수 있고, 사진, 등등 노래 서비스는, 각각의 자원은 특정 URI (유니폼 리소스 로케이터)에 대응 및 자원을 얻을 수있는이 URI에 방문을 표시하는 데 사용합니다.

 

인터넷, 클라이언트와 온라인 과정을 전달 서버 간의 자원의 상호 작용의 단지 표현, 자원 URI를 호출하는 프로세스의 다른 발현을 가져옵니다. 이러한 상호 작용은, 클라이언트가 GET (인수), POST는 (작성), PUT (갱신)을 포함, 몇 가지 기본적인 HTTP 작업을 사용할 수있는 서버 상태를 모두 저장해야합니다, 즉, 비 저장 HTTP 프로토콜을 사용할 수 있으며 서버의 자원 "상태 변환"(상태 전송)이 일어날 수 있도록 (삭제) 삭제라고도 "인 Representational 상태 전송."

 

편안한위한 봄 부팅 지원

 

다른 노트를 통해 프론트 엔드의 지원 요청에 편안하고 개발 프로그램을위한 봄 부팅 전체 지원은 주석의 일반 사용 외에, 봄 부팅 또한 노트의 조합을 언급. 이 주석은 매핑 방법을 일반적으로 HTTP를 단순화하고, 더 나은 방법은 의미 적 표현을 주석.

 

  • @GetMapping, 요청 처리를 받기
  • @PostMapping, 후 처리 요청
  • 리소스를 업데이트하는 데 사용 @PutMapping
  • @DeleteMapping, 요청을 삭제 처리
  • 사용 @PatchMapping은 자원의 일부를 업데이트

시험 종류 :

패키지 com.example; 

수입 org.junit.Before;
수입 org.junit.Test;
수입 org.junit.runner.RunWith;
수입 org.springframework.beans.factory.annotation.Autowired;
수입 org.springframework.boot.test.context.SpringBootTest;
수입 org.springframework.test.context.junit4.SpringRunner;
수입 org.springframework.test.web.servlet.MockMvc;
수입 org.springframework.test.web.servlet.MvcResult;
수입 org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
수입 org.springframework.test.web.servlet.setup.MockMvcBuilders;
수입org.springframework.util.LinkedMultiValueMap;
수입 org.springframework.util.MultiValueMap;
수입 org.springframework.web.context.WebApplicationContext; 

@RunWith (SpringRunner. 클래스 ) 
@SpringBootTest 
공공  클래스 MessageControllerTest { 

    @Autowired 
    개인 의 WebApplicationContext의 WAC; 

    개인 MockMvc mockMvc; 

    @Before 
    공개  무효 설정 () {
          .mockMvc = MockMvcBuilders.webAppContextSetup ( .wac) .build (); 
        saveMessages (); // 初始化数据
    } 

    //모든 초기화 데이터 요청받을 받기 
    @Test
     공공  무효 GetAllMessages ()를 던져 예외 { 
        문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.get ( "/ 메시지" )) andReturn ()하는 GetResponse () getContentAsString (); ... 
        System.out에. println 메소드 ( "결과 ==="+ mvcResult는); 
    } 

    // 하나의 GET 요청 메시지를 얻을 
    @Test
     공공  무효 의 getMessage () 던져 예외 { 
        문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.get ( "/ 메시지 / 6." )). . andReturn ()하는 GetResponse () getContentAsString (); 
        에서 System.out.println ( "=== 결과"+mvcResult); 
    } 

    // .更新ID为6的消息体测试修改(넣어请求) 
    @Test
     공개  공극 modifyMessage () 가 발생 예외 {
         최종 MultiValueMap <문자열, 문자열> = PARAMS 새로운 LinkedMultiValueMap <> (); 
        params.add ( "ID", "6" ); 
        params.add ( "텍스트"를 "텍스트" ); 
        params.add ( "요약", "요약" ); 
        문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.put는 ( "/ 메시지" ) (PARAMS) .params) 
                .andReturn ().하는 GetResponse ().
        에서 System.out.println ( "결과 ==="+ mvcResult); 
    } 

    // 测试局部修改(패치请求) 
    @Test
     공개  공극 patchMessage () 가 발생 예외 {
         최종 MultiValueMap <문자열, 문자열> = PARAMS 새로운 LinkedMultiValueMap <> (); 
        params.add ( "ID", "6" ); 
        params.add ( "텍스트"를 "텍스트" ); 
        문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.patch은 ( "/ 메시지 / 텍스트" ) 
                .params (PARAMS)) andReturn ()하는 GetResponse () getContentAsString ()...; "결과 ==="+ mvcResult);

    
    @Test
     공개  공극 deleteMessage ()가 발생 예외 { 
        mockMvc.perform (MockMvcRequestBuilders.delete ( "/ 메시지 / 6" ).)를 andReturn (); 
        문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.get ( "/ 메시지" )) 
                .andReturn ()하는 GetResponse () getContentAsString ()..; 
        에서 System.out.println ( "결과 ==="+ mvcResult); 
    } 

    @Test 
    공개  공극 saveMessage ()가 발생 예외 {
         최종MultiValueMap <문자열, 문자열> = PARAMS 새로운 LinkedMultiValueMap <> (); 
        params.add ( "텍스트"를 "텍스트" ); 
        params.add ( "요약", "요약" ); 
        문자열 mvcResult = mockMvc.perform (MockMvcRequestBuilders.post은 ( "/ 메시지" ) .params (PARAMS)) andReturn ()하는 GetResponse () getContentAsString ()...; 
        에서 System.out.println ( "결과 ==="+ mvcResult); 
    } 

    개인  공극   saveMessages () {
         위해 ( int로 I = 1; i가 <10; I ++ ) {
             최종 MultiValueMap <문자열, 문자열> LinkedMultiValueMap <> (); 
            params.add ( "
            params.add ( "요약", "요약"+ I);
            시도 { 
                MvcResult mvcResult = mockMvc.perform은 (MockMvcRequestBuilders.post은 ( "/ 메시지" ) .params (PARAMS)) andReturn ().; 
            } 캐치 (예외 전자) { 
                e.printStackTrace (); 
            } 
        } 
    } 
}

제어 층 :

패키지 com.example.controller; 

수입 com.example.domain.Message;
수입 com.example.service.MessageRepository;
수입 org.springframework.beans.factory.annotation.Autowired;
가져 org.springframework.web.bind.annotation을 *. ; 

수입 은 java.util.List; 

@RestController 
@RequestMapping ( "/" )
 공개  수업 MessageController { 

    @Autowired 
    개인 MessageRepository messageRepository; 

    // 获取所有消息体 
    @GetMapping (값 = "메시지" )
     공개 목록 <메시지>  목록을 () {
        목록<메시지> 메시지 = .messageRepository.findAll ();
        반환 메시지를; 
    } 

    // 创建一个消息体 
    @PostMapping (값 = "메시지" )
     공개 메시지 작성 (메시지 메시지) { 
        메시지 = .messageRepository.save (메시지);
        반환 메시지를; 
    } 

    // 使用请求进行修改넣어 
    @PutMapping (값 = "메시지" )
     공공 메시지 수정 (메시지 메시지) { 
        메시지 messageResult을 = .messageRepository.update (메시지);
        반환messageResult; 
    } 

    // 更新消息的텍스트字段 
    @PatchMapping (값 = "/ 메시지 / 텍스트" )
     공공 메시지 패치 (메시지 메시지) { 
        메시지 messageResult = .messageRepository.updateText (메시지);
        반환 messageResult을; 
    } 

    @GetMapping (값 = "메시지 / {ID}" )
     공공 메시지 GET (@PathVariable 긴 ID) { 
        메시지 메시지 = .messageRepository.findMessage (ID);
        반환 메시지를; 
    } 

    @DeleteMapping (값 = "메시지 / {ID}" )
    공공  무효은 (@PathVariable ( "ID"삭제 ) 롱 ID) {
         .messageRepository.deleteMessage (ID)를; 
    } 
}

인터페이스 레이어

패키지 com.example.service; 

수입 com.example.domain.Message; 

수입 은 java.util.List; 

공용  인터페이스 MessageRepository {
     공개 목록 <메시지> findall은 (); 

    공공 (메시지 메시지) 저장 메시지; 

    공공 메시지 업데이트 (메시지 메시지); 

    공공 메시지 UPDATETEXT (메시지 메시지); 

    공공 메시지 findMessage (긴 ID); 

    공공  무효 deleteMessage (긴 ID); 
}

서비스 레이어

패키지 com.example.service.impl; 

수입 com.example.domain.Message;
수입 com.example.service.MessageRepository;
수입 org.springframework.stereotype.Service; 

수입 인 java.util.ArrayList;
수입 은 java.util.List;
수입 java.util.concurrent.ConcurrentHashMap;
수입 java.util.concurrent.ConcurrentMap;
수입 java.util.concurrent.atomic.AtomicLong; 

이 @Service ( "messageRepository" )
 공용  클래스 InMemoryMessageRepository이 구현 MessageRepository { 

    개인  정적 AtomicLong 카운터 =새로운 AtomicLong ();
    민간  최종 인 ConcurrentMap <롱, 메시지> 메시지 = 새로운 ConcurrentHashMap의 <> (); 

    @Override 
    공개 목록 <메시지> findall은 () { 
        목록 <메시지> 메시지 = 새로운 ArrayList를 <메시지> ( .messages.values ());
        반환 메시지를; 
    } 

    @Override 
    공개 (메시지 메시지) {저장 메시지 
        긴 ID = message.getId ();
        만약 (ID == ) { 
            ID = counter.incrementAndGet ();
            message.setId (ID); 
        } 
        .messages.put (ID, 메시지);
        반환 메시지를; 
    } 

    @Override 
    공공 메시지 업데이트 (메시지 메시지) {
         .messages.put (message.getId (), 메시지);
        반환 메시지를; 
    } 


    @Override 
    공개 메시지 UPDATETEXT (메시지 메시지) { 
        메시지 MSG = .messages.get (message.getId ()); 
        msg.setText (message.getText ()); 
        .messages.put (msg.getId (), MSG);
        반환 MSG를; 
    } 

    @Override
    공공 메시지 findMessage (긴 ID) {
         반환  .messages.get (ID)를; 
    } 

    @Override 
    공공  무효 deleteMessage (긴 ID) {
         .messages.remove (ID); 
    } 
}

 

추천

출처www.cnblogs.com/gjq1126-web/p/11781355.html