Search
Duplicate
🔈

Fake

태그
복잡한 로직이나 객체 내부에서 필요로 하는 다른 외부 객체들의 동작을 단순화하여 구현한 객체이다.
동작의 구현을 가지고 있지만 실제 프로덕션의 비즈니스 로직이 존재하지 않거나 적합하지 않은 객체이다.
@Entity public class UserProfile { @Id private Long userId; private String userName; protected UserProfile() {} public UserProfile(Long userId, String userName) { this.userId = userId; this.userName = userName; } public Long getUserId() { return this.userId; } public String getUserName() { return this.userName; } } public interface UserProfileRepository { void save(UserProfile userProfile); UserProfile findByUserId(long userId); } public class InMemoryUserProfileRepository implements UserProfileRepository { private Collection<UserProfile> userProfiles = new ArrayList<>(); @Override public void save(UserProfile userProfile) { if (findByUserId(userProfile.getUserId()) == null) { userProfiles.add(userProfile); } } @Override public UserProfile findByUserId(long userId) { for (UserProfile userProfile : userProfiles) { if (userProfile.getUserId() == userId) { return userProfile; } } return null; } }
Java
복사
위 코드와 같이 테스트해야 하는 객체가 외부에 의존성을 가지고 있는 경우가 대표적이다.
이 경우, 단위 테스트를 진행할 때는 FakeUserProfileRepository를 만들어 테스트 객체에 주입하는 방법을 사용할 수 있다.
이렇게 가짜 객체를 전달하면 단위 테스트는 데이터베이스에 의존하지 않으면서도 기존 의존성을 유지하면서 테스트 로직을 수행할 수 있게 된다.
이처럼 실제 인스턴스화 되어있으면서 메소드 또한 동일한 기능을 수행하도록 만들어 사용하는 객체가 Fake다.