1. 첫번째 에러
java.lang.AssertionError: Status expected:<200> but was:<406>
- @Getter가 없어서 자주 발생하는 에러라고 한다. 이 경우에는 DTO에 @Getter의 부재로 Jackson라이브러리의 직열화/역질렬화에서 오류가 생겼다. (Jackson라이브러리가 response를 보낼때 DTO를 직렬화 시키는데 Getter의 부재로 그러지 못하여 406 Not Acceptable에러가 나왔다.)
2. 두번째 에러
Strict stubbing argument mismatch.
Entity를 테스트용으로 만들어서 스터빙 했지만 리포지토리에서 돌아오는 엔티티는 실제상황에서 내가 서비스 코드에 주입하여 JPA 로 보낸 엔티티와 다르다. 그래서 미스매치. 이 경우 내가 제작한 객체를 사용할 때 스터빙시에 any()를 사용하여야 한다.
3. 세번째 에러
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class ...
이것도 직렬화시에 일어나는데 접근제한자가 private이어서 ObjectMapper가 접근 할 수 없어서 발생한다.
해결방법
1. @JsonProperty를 필드에 선언
2. @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)를 클래스에 선언
3. mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY): 테스트 코드에서 오프젝트 맵퍼를 선언후에 주입.
나는 테스트코드와 실행코드를 같이 두고 싶지 않아서 3번 방법을 사용하여 테스트코드의 @BeforeEach에서 세팅하여 주었다.
4. 네번째 에러
Cannot invoke "String.length()" because "this.roles" is null (through reference chain: com.example.login.domain.Users["roleList"]) com.fasterxml.jackson.databind.JsonMappingException: Cannot invoke "String.length()" because "this.roles" is null (through reference chain: com.example.login.domain.Users["roleList"])
ObjectMapper는 인스턴스 변수가 없어도 Getter처럼 보이면 초기화해야 할 변수로 보는 듯하다. getRoleList라는 메소드가 있었는데 인스턴스 변수로 없음에도 자꾸 찾고 있었다. 변수명을 bringRoleList로 변경하니 해결 되었다.
5.다섯번쨰 에러
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException:
의존성에러. 같은 타입의 빈들의 우선순위를 정해주지 않아서 발생. @Primary를 붙여서 해결
출처:
1. 첫번째 에러
archive4E1 : https://velog.io/@ssi02121/jUnit5-java.lang.AssertionError-Status-expected200-but-was406-%EC%97%90%EB%9F%AC
kth990303: https://kth990303.tistory.com/304
2. 두번째 에러
3.세번째 에러
hjhello423: https://steady-hello.tistory.com/90
4.네번째 에러
findmypiece: https://findmypiece.tistory.com/166
'Spring > Testing' 카테고리의 다른 글
AssertJ (0) | 2024.02.01 |
---|---|
Mockito & MockMvc (0) | 2024.02.01 |
HTTP 응답코드 (0) | 2024.02.01 |