MemberController

...
    @PostMapping("/members")
    public Member save(@RequestBody Member member) {
        return memberService.create(member);
    }
...

MemberControllerTest

@WebMvcTest(MemberController.class)
class MemberControllerTest {

    @Autowired
    MockMvc mockMvc;

    @MockBean
    MemberService memberService;

    @Test
    void create() throws Exception {
        Member member = getMockMembers().get(0);
        when(memberService.create(member)).thenReturn(member);
        String memberString = "{\"name\":\"grace\",\"email\":\"govlmo91@gmail.com\"}";

        mockMvc.perform(post("/v1/members")
                    .content(memberString))
                .andExpect(status().isOk());
    }
}

테스트결과

요청값

MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /v1/members
       Parameters = {}
          Headers = [Content-Length:"45"]
             Body = <no character encoding set>
    Session Attrs = {}

응답값

MockHttpServletResponse:
           Status = 415
    Error message = null
          Headers = [Accept:"application/json, application/octet-stream, application/xml, application/*+json, text/plain, text/xml, application/x-www-form-urlencoded, application/*+xml, multipart/form-data, multipart/mixed, */*"]
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

해결

MockMvc로 테스트할 때 ContentType을 지정해주자.

.contentType(MediaType.APPLICATION_JSON))

        mockMvc.perform(post("/v1/members")
                    .content(memberString)
                    .contentType(MediaType.APPLICATION_JSON))
                .andDo(print())
                .andExpect(status().isOk());
@Entity
public class Team {

    @Id @GeneratedValue
    @Column(name = "team_id")
    private String id;
...

@GeneratedValue에서 strategy 옵션 없을 때 h2데이터베이스(1.4.199)는 기본전략으로 시퀀스 씀. 이런 환경에서 id는 String타입일 때 insert 쿼리 안나가고 테이블 만드는 쿼리만 나감.. 그래서 이렇게 수정함

@Entity
public class Team {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "team_id")
    private Long id;
    private String name;

id는 Long타입으로. strategy는 IDENTITY로. Insert쿼리 잘 나감

warning: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled.  
  Your processor is: [org.gradle.api.internal.tasks.compile.processing.IncrementalProcessingEnvironment](org.gradle.api.internal.tasks.compile.processing.IncrementalProcessingEnvironment)  
  Lombok supports: sun/apple javac 1.6, ECJ  
1 warning

에러가 뜰 시

build.gradle 에서

compileJava{  
 options.fork = false  
 options.incremental = false  
}

추가.

먼저 Enable annotation processing 체크.

 

그래도 에러난다면

 

build.gradle에서 다음과 같이 의존성추가 되었는지 확인할 것.

 

 

compile 'org.projectlombok:lombok' 만 작성할 때가 많은데,

그 밑에 있는

 

annotationProcessor 'org.projectlombok:lombok' 

또한 작성해줄 것.

+ Recent posts