→ Access Key, Secret Key 다시 설정
테스트 하기가 정말 너무너무너무 어려웠다
보드의 정보와, image를 같이 등록하려면, 이를 Multipart로 등록해야한다.
보드의 정보를 → Json을 String으로 바꾸어 주어야 한다.
다음과 같이 인수테스트를 작성하였다.
이는 ObjectMapper의 도움을 받았다. 예시는 다음과 같다.
"{\\"subject\\":\\"test\\",\\"content\\":\\"test\\",\\"boardType\\":\\"NOTICE\\"}"
이때 deserialize 문제가 발생했다.
Cannot serialize because cannot determine how to serialize content-type multipart/form-data
java.lang.IllegalArgumentException: Cannot serialize because cannot determine how to serialize content-type multipart/form-data
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:72)
at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:59)
at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:84)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:263)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:277)
→ .multiPart("file", "data", file.getBytes()) → 다음과 같이 전달해서 해결하였다.
최종 코드는 다음과 같다.
BoardSaveRequest boardSaveRequest = BoardSaveRequest.builder()
.boardType(BoardType.NOTICE)
.content("test")
.subject("test")
.build();
String boardSaveJson = objectMapper.writeValueAsString(boardSaveRequest);
MockMultipartFile file = new MockMultipartFile("data", "test.png",
MediaType.IMAGE_PNG_VALUE, "test".getBytes());
ExtractableResponse<Response> response = RestAssured
.given()
.header("Authorization", accessToken)
.multiPart("json", boardSaveJson, APPLICATION_JSON_VALUE)
.multiPart("file", "data", file.getBytes())
.log().all()
.when()
.post("/board")
.then()
.log().all()
.extract();