테스트케이스

1 minute read

로직 테스트 방법

개발한 기능을 테스트 할 때 자바의 main메서드를 실행하여 할 수 있지만 이러한 방법은 준비하고 실행하는데 오래걸릴 뿐더러 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵기 때문에 자바가 제공하는 JUnit이라는 프레임워크로 테스트를 실행한다.

우선 다음과 같은 repository파일에서 데이터를 저장하고 가져오는 작업을하는 파일이 있다고 가정하자

public class MemoryMeberRepository implements MemberRepository{
    private static Map<Long,Member> store = new HashMap<>();
    private static long sequence = 0L;
    @Override
    public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(),member);
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {

        return Optional.ofNullable(store.get(id));//null이 반횐될 수 있으므로 null이여도 전달된다.
    }

    @Override
    public Optional<Member> findByName(String name) {
        return store.values().stream()
                .filter(member ->  member.getName().equals(name)) //전달된 name과 같은게 있는지 확인
                .findAny(); //있다면 하나라도 반환

    }

    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }

    public void clearStore() {
        store.clear();
    }
}

위와 같은 respository를 테스트하기 위해서는 main폴더 밑에 있는 test폴더에 파일을 만든다.(ctrl+shift+t)

class MemoryMemberRepositoryTest {

    MemoryMeberRepository repository = new MemoryMeberRepository();
    @BeforeEach //테스트가 수행되기 전에 실행되며 초기화 시켜준다.
    public void beforeEach(){
        repository.clearStore();
    }
    @AfterEach //테스트가 끝날때 마다 실행되며 초기화 시켜준다.
    public void afterEach(){
        repository.clearStore();
    }

    @Test
    public void save(){
        Member member = new Member();
        member.setName("changmin");
        repository.save(member);
        Member result=repository.findById(member.getId()).get();//optional객체는 get으로 값 꺼내기 가능
        System.out.print(result.getName() );
        Assertions.assertEquals(member,result); // Assertons는 member와 result가 같은지 확인 다르면 에러 발생
    }
}
  • beforeEach() : 테스트가 실행되기 전에 실행
  • afterEach() : 테스트가 끝날때 마다 실행되며 레포지토리 객체에 저장된 내용을 비워준다.
  • save() : member객체에 changmin이라는 이름을 저장한후 respository객체의 save메소드를 이용하여 저장한다 다음으로 저장된 멤버의 아이디를 가져와 출력하고 Assertions객체를 이용해 결과 값과 비교한다.

만약 테스트가 잘 된다면 에러 메세지 없고 에러가 난다면 붉은색 에러메세지가 출력된다.

Leave a comment