04 테스트코드 실습

p44 - src/main/java/spring/basic/repository/UserRepositoryImpl

@Component
@Qualifier("userRepositoryImpl")
public class UserRepositoryImpl implements UserRepository {

    private static ConcurrentMap<Long, User> users = new ConcurrentHashMap<>();
    @Override
    public void save(User user) {
        users.put(user.getUserId(), user);
    }

    @Override
    public List<User> getUsers() {
        return new ArrayList<>(users.values());
    }

    @Override
    public Optional<User> getUserByUserId(Long userId) {
        return users.values().stream().filter(user -> user.getUserId().equals(userId)).findAny();
    }
}

p45, 46, 47 - src/test/java/spring/basic/repository/UserRepositoryImplTest

class UserRepositoryImplTest {

    private UserRepositoryImpl userRepository;

    @BeforeEach
    void setUp() {
        userRepository = new UserRepositoryImpl();
    }

    @Test
    void save() {
        // given: 새로운 User 객체를 생성합니다.
        User user = new User(1L, "John Doe", "Gold", LocalDate.now(), LocalDate.now());

        // when: 저장소에 사용자를 저장합니다.
        userRepository.save(user);

        // then: 저장된 사용자가 저장소에서 올바르게 조회되는지 확인합니다.
        Optional<User> retrievedUser = userRepository.getUserByUserId(user.getUserId());
        assertTrue(retrievedUser.isPresent()); // 사용자가 존재하는지 확인
        assertEquals(user.getUserId(), retrievedUser.get().getUserId()); // 사용자 ID가 동일한지 확인
        assertEquals(user.getName(), retrievedUser.get().getName()); // 사용자 이름이 동일한지 확인
    }

    @Test
    void getUsers() {
        // given: 두 명의 사용자 객체를 생성합니다.
        User user1 = new User(1L, "John Doe", "Gold", LocalDate.now(), LocalDate.now());
        User user2 = new User(2L, "Jane Doe", "Silver", LocalDate.now(), LocalDate.now());
        userRepository.save(user1); // 첫 번째 사용자 저장
        userRepository.save(user2); // 두 번째 사용자 저장

        // when: 저장된 모든 사용자를 가져옵니다.
        List<User> users = userRepository.getUsers();

        // then: 사용자 목록이 두 명의 사용자를 포함하는지 확인합니다.
        assertEquals(2, users.size()); // 사용자의 수가 2명인지 확인

        // 각 사용자가 올바르게 저장되었는지 확인
        assertEquals("John Doe", users.get(0).getName());
        assertEquals("Jane Doe", users.get(1).getName());
    }

    @Test
    void getUserByUserId() {
        // given: 두 명의 사용자 객체를 생성하고 저장합니다.
        User user1 = new User(1L, "John Doe", "Gold", LocalDate.now(), LocalDate.now());
        User user2 = new User(2L, "Jane Doe", "Silver", LocalDate.now(), LocalDate.now());
        userRepository.save(user1);
        userRepository.save(user2);

        // when: 특정 ID로 사용자 조회
        Optional<User> foundUser = userRepository.getUserByUserId(1L);

        // then: 사용자가 조회되었는지 확인
        assertTrue(foundUser.isPresent()); // 사용자가 존재하는지 확인
        assertEquals(1L, foundUser.get().getUserId()); // ID가 1L인지 확인
        assertEquals("John Doe", foundUser.get().getName()); // 이름이 "John Doe"인지 확인

        // 없는 사용자를 조회했을 때
        Optional<User> notFoundUser = userRepository.getUserByUserId(3L);
        assertTrue(notFoundUser.isEmpty()); // 없는 사용자는 조회되지 않아야 함
    }
}

Last updated