쉬운 프로그래밍

Junit을 통한 단위 테스트 본문

Programming/Junit

Junit을 통한 단위 테스트

쉬운형 2021. 1. 21. 01:12

완전 기초적인 Junit 단위 테스트 예시이다.

 

테스트 클래스는 밑줄친 경로에 생성하도록 한다.

 

public class MemoryMemberRepository 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));
    }

    @Override
    public Optional<Member> findByName(String name) {
       return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }

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

    public void clearStore() {

        store.clear();
    }
}

위의 서비스에 대한 테스트 코드를 작성하면 아래와 같다.

 

전역변수 확인!

 

@Test
    public void save() {
        Member member = new Member();
        member.setName("느엉");

        repository.save(member);

        Member result = repository.findById(member.getId()).get();
        Assertions.assertThat(member).isEqualTo(result);
    }

@Test 어노테이션을 달아준 후 Assertions 라이브러리를 통해 검증하도록 한다.

 

* 위의 Assertions은 import org.assertj.core.api.Assertions;

 

테스트를 실행하는데는 여러가지 방법이 있긴한데 위에 빨간 동그라미 부분으로 하는게 직관적이긴하다.

 

테스트가 정상적으로 완료됐다면 위와 같이 나올것이다.

 

만약에 위 캡쳐처럼 테스트케이스가 통과하지 못하는 경우에는 아래와 같이 나올것이다.

 

 

아래 빨간 동그라미 부분으로 돌리면 클래스 단위로 테스트를 실행할 수 있다.

 

패키지 단위로도 실행할수있고,,, 이거는 뭐 직관적으로 하면 다 할수있을거같아서 캡쳐생략~

 

 

테스트 코드 작성할때 진짜 중요한 부분이 있다.

 

각각 테스트끼리는 순서 의존 등 서로 영향을 끼쳐서는 안된다!

 

그래서 매 테스트가 끝날때마다 다음 테스트에 영향이 없도록 조치를 해줘야하는데

 

이는 @AfterEach 어노테이션을 달아서 테스트 클래스에 작성한다.

 

의미 그대로 각 테스트케이스가 끝날때마다 실행되는 시퀀스로 생각하면 된다.

 

public void clearStore() {

        store.clear();
    }

레퍼지토리에 저장소를 비우는 메소드를 위와 같이 만들고

 

    @AfterEach
    public void afterEach() {
        this.repository.clearStore();
    }

테스트 클래스에 위와 같은 메소드를 만들어주면 매 테스트케이스가 끝날때마다 afterEach()가 실행된다.

 

그렇게 되면 repository.store가 매번 비어지기에 순서 의존도 등이 생기지않아서 테스트의 독립성을 유지할수있다!

 

 

** 인프런 김영한님 강의를 참고하여 포스팅하였습니다. **

(www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/)

 

'Programming > Junit' 카테고리의 다른 글

Junit 테스트 코드 작성 양식  (0) 2021.01.21
Comments