[Java] [Test] JUnit 프레임워크
Updated:
JUnit 프레임워크로 테스트 작성
- src/test/파일경로/클래스네임Test로 파일 만들기
- @Test 어노테이션 붙이고 실행할 함수 만들기
-
테스트 코드 입력 후 assertThat 으로 검증 3-1. 테스트할 원본 선언 3-2. given, when, then 셋 을 검증
//given Member member1 = new Member(); member1.setName("newName1"); Member member2 = new Member(); member2.setName("newName1"); //when //방법1 : try catch /* memberService.join(member1); try { memberService.join(member2); fail("예외가 발생해야합니다"); } catch (IllegalStateException e) { // 성공 // assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); //실패 assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); }*/ //방법2 memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); //then assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
- 여러 함수를 동시에 테스트 할 경우 테스트 하는 원본 파일에 clearStore함수 작성 후 테스트파일에 @AfterEach어노테이션과 함수 작성 후 클리어 적용 4-1. clear함수 있는 class 에서 test 할 때
-----------------------원본 파일에서 테스트관련 코드
public void clearStore() {
store.clear();
}
}
----------------------------------------Test File
package com.kpgoing.deliveryplatform.repository;
import com.kpgoing.deliveryplatform.domain.Member;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach() {
repository.clearStore();
}
@Test
public void save() {
Member member = new Member();
member.setName("testGo");
//꺼내기
repository.save(member);
Member result = repository.findById(member.getId()).get();
//검증1 = log 글자로 확인 - 보기 힘듦
//System.out.println("result = " + (result == member));
//검증2 = assertions.assertEquals
//Assertions.assertEquals(member, result);
//검증2 = assertions.org asserti
assertThat(member).isEqualTo(result);
//실무에서는 build 툴이랑 엮어서 오류면 다음 단계로 못넘어가게 막음
}
@Test
public void findByName() {
Member member1 = new Member();
member1.setName("name1");
repository.save(member1);
Member member2 = new Member();
member2.setName("name22");
repository.save(member2);
Member result = repository.findByName("name1").get();
assertThat(result).isEqualTo(member1);
}
@Test
public void findAll() {
Member member1 = new Member();
member1.setName("name1");
repository.save(member1);
Member member2 = new Member();
member2.setName("name22");
repository.save(member2);
List<Member> result = repository.findAll();
assertThat(result.size()).isEqualTo(2);
}
}
4-2. clear함수 없는 다른 class 함수 - 의존성주입으로 같은 객체 사용 4-2-1. service(테스트할 파일)에 의존성 주입해서
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
4-2-2. test에서 가져와서 사용
package com.kpgoing.deliveryplatform.service;
import com.kpgoing.deliveryplatform.domain.Member;
import com.kpgoing.deliveryplatform.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
class MemberServiceTest {
MemberService memberService;
MemoryMemberRepository memberRepository;
//afterEach를 써야하는데 서비스에는 해당 함수가 없음
//MemberService memberService = new MemberService();
//MemoryMemberRepository memberRepository = new MemoryMemberRepository();
// 이렇게 new 로 따로 MemoryMemberRepository를 선언하면 새로운 객체를 만드는 것이기 때문에
// MemberService에서 사용하는 MemoryMemberRepository와는 다른 게 됨
//같은 인스턴스를 쓰도록 바꿔야함
// 1) service 로 가서 외부에서 MemoryMemberRepository를 넣어주도록 바꿔야 함
// 2) before each로 추가
@BeforeEach
public void beforeEach() {
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@AfterEach
public void afterEach() {
memberRepository.clearStore();
}
@Test
void 회원가입() {
//given
Member member = new Member();
member.setName("newName1");
//when
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test
public void 중복회원예외() {
//given
Member member1 = new Member();
member1.setName("newName1");
Member member2 = new Member();
member2.setName("newName1");
//when
//방법1
/* memberService.join(member1);
try {
memberService.join(member2);
fail("예외가 발생해야합니다");
} catch (IllegalStateException e) {
// 성공
// assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
//실패
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}*/
//방법2
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
//then
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
@Test
void 멤버찾기() {
}
@Test
void findOne() {
}
}
참고
- 자바의 정석
- [강의](https://www.tcpschool.com/java]
-
Leave a comment