거누의 개발노트

assertThat().extracting().containsExactly() error 본문

트러블 슈팅

assertThat().extracting().containsExactly() error

Gogozzi 2022. 7. 10. 03:00
반응형

QueryDSL 강의를 듣는 중에 assertThat().extracting().containsExactly() 해당 코드를 작성하면 containsExactly에서 컴파일 에러가 발생한다.

실행 시켜보면 아래와 같은 에러 메시지를 확인 할 수 있다.

java: cannot find symbol
  symbol:   method containsExactly(java.lang.String,java.lang.String)
  location: class org.assertj.core.api.AbstractObjectAssert<capture#1 of ?,capture#2 of ?>

원인을 찾아보자.

이렇게 써보니까 빨간불은 사라졌다.

extracting 메소드가 단일 인자를 받지 못하는 것 같다. 강의에서는 되었었는데, 버전이 바뀌면서 단일개는 못받는 것일까?

@CheckReturnValue
public AbstractListAssert<?, List<?>, Object, ObjectAssert<Object>> extracting(String... propertiesOrFields) {
  Tuple values = byName(propertiesOrFields).apply(actual);
  String extractedPropertiesOrFieldsDescription = extractedDescriptionOf(propertiesOrFields);
  String description = mostRelevantDescription(info.description(), extractedPropertiesOrFieldsDescription);
  return newListAssertInstance(values.toList()).withAssertionState(myself).as(description);
}

현재 사용하고 있는 extracting 메소드를 확인해 봤을 땐, String을 여러개 받고 있긴 하다.

assertThat(result).extracting("username");

위 처럼 사용했을 때도 오류가 없어서 어떤 메소드를 사용하고 있는지 확인 해봤다.

@CheckReturnValue
public AbstractObjectAssert<?, ?> extracting(String propertyOrField) {
  return super.extracting(propertyOrField, this::newObjectAssert);
}

확실히 단일 인자만 받고 있다. 버전 문제는 아닌듯 하다.

일단 위에 코드로 실행 해본 결과

org.assertj.core.util.introspection.IntrospectionError: 
Can't find any field or property with name 'username'.
Error when introspecting properties was :
- No getter for property 'username' in java.util.ArrayList 
Error when introspecting fields was :
- Unable to obtain the value of the field <'username'> from <[Member(id=3, username=member1, age=10), Member(id=4, username=member2, age=20)]>

이런 에러가 나온다.

이름이 'username'인 필드나 속성을 찾을 수 없다는 에러인것 같다.

하지만 위 에러에서 username이 보이는데...

https://www.inflearn.com/questions/31792

 

jUnit5는 extracting을 어떻게 대체하나요? - 인프런 | 질문 & 답변

extracting().containsExactly()를 실행하는데 오류가 나서 대체 메소드를 찾는 중인데 잘 되지가 않네요 - 질문 & 답변 | 인프런...

www.inflearn.com

같은 문제를 겪고 있는 사람이 있었다...

해결 방법은 아래 Assertions를 import 하면 금방 해결이 된다... 

import static org.assertj.core.api.Assertions.*;

 

윽... 아까운 내시간..

반응형
Comments