일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- entity
- Java Reflection API
- 스프링 데이터 JPA
- 컴포넌트 스캔
- 가을야구
- SpringBootTest
- Not Acceptable
- 정적 컨텐츠
- 기본 생성자
- 스프링 컨테이너
- 스프링
- jdbc
- Controller
- RunWith
- restTemplate
- 의존성 주입
- 통합 테스트
- 테스트 코드
- 405 METHOD_NOT_ALLOWED
- ResponseEntity
- jdbc template
- 랜덤 포트
- 의존관계 자동 주입
- JPA
- 빈 스코프
- testresttemplate
- 키움
- 406 NOT_ACCEPTABLE
- 좋은 객체지향 설계 원칙
- 스프링 IoC 컨테이너
- Today
- Total
코드네임 JY
[스프링 입문] 테스트 코드 본문
미리보기
✅ 테스트 코드가 무엇인지 알아보자!
✅ JUnit 프레임워크에 대하여 알아보자!
✅ TDD(Test Driven Development)에 대하여 알아보자!
🎂 테스트 코드
코드를 신나게 다 작성하였다. 그대로 배포할 것인가? 아니다! 최소한의 검증 과정은 거쳐야 사람들에게 보여줄 수 있지 않나!
내가 개발한 기능이 의도한 대로 잘 동작하는지 검증하는 과정은 배포 과정에서 필수적이다.
그런데 이 테스트.. 어떻게 진행할건데..? 간단한 소규모의 코드는 main 메소드를 통해서 실행할 수 있다고 쳐도,
규모가 조금이라도 커지면 테스트를 준비하고 실행하는데 엄청 많은 코스트가 소요될 것이다.
따라서 자바에서는 'JUnit' 이라는 테스트 프레임워크로 이러한 문제를 해결할 수 있다!
테스트 코드를 사용하게 된다면, 위 폴더 구조와 같이 'test' 라는 폴더를 통해 사용할 수 있다!
🍧 JUnit
JUnit은 자바 언어용 단위 테스트 프레임워크이다.
스프링에서는 테스트를 진행하기 위해서 JUnit이라는 프레임워크를 사용한다.
build.gradle 파일에 아래와 같이 환경설정이 되어 있으면 사용할 수 있다!
테스트 코드를 돌려보기 위해서 활용하면 몇 가지 Annotation이 있는데, 이번 공부에서 주로 사용하였던 몇 가지만 설명하겠다!
@Test | 테스트 메소드임을 알려줌 |
@BeforeEach | 각 테스트 메소드의 진행 전에 실행되어야 함 |
@AfterEach | 각 테스트 메소드가 진행되고 실행되어야 함 |
아래 코드는 스프링 강의 공부에 활용한 테스트 코드(MemberServiceTest.java) 중 한 부분인데,
MemberService memberService;
MemoryMemberRepository memberRepository;
@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("hello");
// when (이거를 실행했을 때)
Long saveId = memberService.join(member);
// then (이런 결과가 나와야 해)
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
@BeforeEach가 붙은 메소드에서 하는 역할
✔️ 각 테스트 메소드가 진행되기 전에 Service와 Repository 객체를 불러온다는 뜻이다!
(Service와 Repository 안에 있는 기능을 사용해야하니까!)
@AfterEach가 붙은 메소드에서 하는 역할
✔️ (현재 코드는 메모리를 DB 역할로 사용 중)
✔️ 각 테스트 메소드가 진행되는 사이사이에 데이터가 깔끔하게 정리되도록 Repository를 비워준다는 뜻이다!
@Test가 붙은 메소드에서 하는 역할
✔️ 실제로 테스트가 진행되는 메소드이다!
✔️ Given / When / Then 으로 구획을 나누는 이유는 깔끔하게 정리하기 위해서!
- Given : 무언가가 주어졌는데 (Member 객체를 통해 새로운 회원을 만들어서 이름을 지정했는데)
- When : 이거를 실행했을 때 (해당 회원을 회원 가입시켰을 때)
- Then : 이런 결과가 나와야 해!! (테스트 코드 내에서 만든 회원과 실제 로직에서 돌아가는 회원 정보가 일치해야 해!!)
🌰 TDD (Test Driven Development)
강의에서 처음 테스트 코드를 작성할 때는, 관련 로직을 먼저 작성하고 그 다음에 테스트 코드를 작성하였다.
'로직 개발 → 테스트 코드 개발' 순서라는 것인데, 이 순서를 뒤바꿔 개발하는 것이 바로 'Test Driven Development' 이다!
'테스트 주도 개발' 은 테스트를 먼저 만들고 테스트를 통과하기 위한 것을 짜는 것인데,
코드를 작성하는 과정에서 먼저 테스트 코드를 작성하고 이를 통과하는 과정을 반복적으로 진행하는 과정이다.
현업에서도 많이 사용하시는 것 같고, TDD 관련된 주제로 시중에 책들도 많이 나와있다.
나는 아직 TDD를 통해 코드를 짜본 적이 없기 때문에 여기서는 간단하게 설명만 하고 넘어가겠다!
'백엔드 공부' 카테고리의 다른 글
[스프링 입문] JDBC & JDBC Template (0) | 2022.12.14 |
---|---|
[스프링 입문] 스프링 빈과 의존관계 (0) | 2022.12.11 |
[스프링 입문] Controller, Service, Repository (0) | 2022.12.06 |
[스프링 입문] API (0) | 2022.12.05 |
[스프링 입문] 정적 컨텐츠, MVC & 템플릿 엔진 (0) | 2022.12.05 |