fake Repository로 테스트를 진행하려고 합니다,
1175
작성한 질문수 6
실제 유저 엔티티 가지고 userRepository를 해야하나요? 이것을 가지고 테스트를 해봤는데 id를 자동 매핑으로 해놔서 실제 fake로 테스트할때 id 값을 넣어줄 수가 없어서 구현에 어려움을 겪고 있습니다. 새로 Fake에 적용될 유저 도메인을 작성해야하나요?
답변 3
0
public class InMemoryOriginalRepository implements OriginalRepository {
private final Map<Long, TestEntity> entities = new HashMap<>();
private final AtomicLong idGenerator = new AtomicLong(1);
@Override
public BillingPay save(TestEntity entity) {
long id = idGenerator.getAndIncrement();
setPrivateField(entity, "id", id); // 이친구는 리플렉션으로 처리 :)
entities.put(id, entity);
return entity;
}
private void setPrivateField(Object object, String fieldName, Object value) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
이유는 db 에 id 를 자동으로 증가시키는걸 위임해버렸기 때문이죵
그래서 entity 에 setId <- 를 열어주지 않는 이상 계속 null 일꺼에용
이럴땐 고수님들이 얘기하는 리플렉션을 조져주면됩니다
0
안녕하세요. 근 한 달이 되어서야 답변을 드리네요. 죄송합니다.
그런데 오래 기다리신 것과는 별개로 제가 질문 상황이 정확히 어떤 상황인지 이해가 되지 않아 답변하기 곤란하네요.ㅠ ‘id를 자동 매핑으로 해놔서 실제 fake로 테스트할 때 id 값을 넣어줄 수 없다’라는 말이 이해가 잘 안 됩니다. id를 자동 매핑으로 해놨기 때문에 발생할 수 있는 테스트하기 어려운 상황은 어떤 상황이었을까요…?
우선 다른 분들과 마찬가지로 예시 코드가 없으셔서 헷갈리시는 것 같아 아래와 같이 예시를 첨부 링크로 달아뒀습니다.
테스트 강의를 만들면서 만든 레포지토리인데요. 참고가 될 수 있지 않을까 싶습니다.
0
아 제 의도가 제대로 전달되지 않았던 것 같습니다.. 제가 엔티티 생성자에 id 값을 주지 않는데 (실제 DB는 id값을 자동으로 매핑 해주기 때문에 id값을 넣지 않았습니다.) 이게 Fake Repo를 작성하면 문제가 생겨서 어떻게 생성자를 작성하시는지 궁금해서 질문드렸습니다. @Builder를 사용하면 되는군요..
0
안녕하세요, 인프런 AI 인턴이에요. fake Repository를 테스트하기 위해서는 가짜 데이터를 사용해야 합니다. 실제 유저 엔티티를 사용하면 실제 데이터베이스에 영향을 주게 되기 때문에 운영 환경에서 테스트할 때 문제가 발생할 수 있습니다. 따라서, 실제 유저 엔티티를 사용하지 않고 fake로 생성된 데이터를 사용하는 것이 좋습니다.
id 값을 자동 매핑으로 설정해놨다면, fake로 테스트할 때 실제 id 값을 넣어줄 수 없는 문제가 발생할 수 있습니다. 이 경우에는 다른 방법으로 id 값을 설정해주어야 합니다. 예를 들어, 가짜 데이터에 일련번호 또는 랜덤한 값을 부여하여 id 값을 할당하는 방법이 있습니다.
또는, 가짜 Repository 또는 Mock Repository를 사용하여 테스트를 진행할 수도 있습니다. 가짜 Repository를 사용하면 가짜 데이터를 사용하여 테스트를 진행할 수 있고, Mock Repository를 사용하면 원하는 데이터를 조작하여 테스트를 진행할 수 있습니다.
따라서, fake로 테스트할 때 id 값을 넣어줄 수 없는 문제를 해결하기 위해서 새로 Fake에 적용될 유저 도메인을 작성하고, 필요한 가짜 데이터를 사용하여 테스트를 진행하는 것이 좋을 것 같아요. 이렇게 하면 실제 데이터를 사용하지 않고도 테스트를 진행할 수 있고, id 값을 원하는 방식으로 설정하여 사용할 수 있을 거예요.
요청하신 내용이 도움이 되셨길 바라며, 추가로 궁금한 점이 있으시면 언제든지 물어보세요. 감사합니다!
주니어 개발자가 더 나아가기 위한 조언을 부탁 드려도 될까요?
0
89
1
Repository 인터페이스 위치
0
71
1
Rest API - 많이하는 실수 에서 복수형
0
402
1
패키지 구조에 대한 질문
0
131
1
의존하는 객체 final 선언 질문드립니다.
0
159
1
의존성 주입에서 파라미터 주입과 필드 주입 관련 질문 드립니다.
0
183
1
강의내용 중 Fake Repository 질문
0
284
1
변하는 값을 추상화 시켜라
0
306
1
외래키를 지양하라는 질문에 대한 궁금증
0
2995
2
안녕하세요 아랫분 질문에 서 궁금한점이 있어서 질문드립니다
0
452
2
@Entity != RDB Table에 대한 질문입니다.
1
496
2
의존성조언에서 UserService의 login은 Clock에 의존하는지 모르지 않나요?
0
462
2
MySQL 사용에 대한 조언 질문있습니다.
0
865
2
강의와 크게 상관은 없지만 공부의 방향성에 대해서 질문합니다.
1
635
2
진짜 객체지향과 테스트하기 쉬운 코드를 위헤서는 jpa가 의미없는게 아닌가하는 생각이 들어요
2
1855
2
c. Collection,Map 질문
1
536
2
DB 엔티티와 도메인 분리
3
4700
2
도메인 객체 질문
1
582
2
Controller / application Service / Domain 의 역할 구분
1
1413
2
테스트 하기 쉬운 코드에서 테스트의 범위?
1
675
2
스프링에서 서비스 레이어(Apllication Layer) 테스트에 대한 질문입니다.
2
895
2
Repository 대신 Reader / Writer 사용 질문있습니다!!
1
709
2
ProductService부분에서 리팩토링 언급 질문
1
387
2
IoC != DI에 대한 질문입니다.
1
833
2





