일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로그래머스 이중우선순위큐 자바
- Spring Boot
- BFS
- ansi sql 장점
- 프로그래머스
- 이중우선순위큐 java
- SQL
- DBASE&
- 이분탐색
- 그리디
- DP
- 디베이스앤 인턴 후기
- 면접 필수 질문
- 디베이스앤
- 백트래킹
- CJ DBASE&
- 프로그래머스 이중우선순위큐
- Gradle
- 이중우선순위큐 자바
- DFS
- 백준
- oracle ansi
- JPA
- oracle ansi sql
- 위상정렬
- ansi sql 단점
- 개발자 면접 준비
- 프로그래머스 이중우선순위큐 java
- IT 면접 준비
- Java
- Today
- Total
쉬운 프로그래밍
Junit을 통한 단위 테스트 본문
완전 기초적인 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가 매번 비어지기에 순서 의존도 등이 생기지않아서 테스트의 독립성을 유지할수있다!
** 인프런 김영한님 강의를 참고하여 포스팅하였습니다. **
'Programming > Junit' 카테고리의 다른 글
Junit 테스트 코드 작성 양식 (0) | 2021.01.21 |
---|