2021. 8. 17. 08:00ใBack-End ์์ ์ค/Spring Framework
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ค๋์ ํตํฉ Test ์์ฑ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ ํด ๋ณด๋๋ก ํ ๊ฒ์ด์์.
๋ฐ๋ก ์์ ํด ๋ณด๊ฒ ์ต๋๋ค!
์ฝ๋์ ๊ด๋ จํ ๋ด์ฉ์ ์ฃผ๋ํ๋์ Github์์ ํ์ธ ํ์ค ์ ์์ต๋๋ค!
๐ ๋ชฉ์ฐจ
01.[Spring Boot] thymeleaf์ Spring Boot
02.[Spring Boot] Spring Web ๊ฐ๋ฐ ๊ธฐ์ด
03.[Spring Boot] ํ์ ๊ด๋ฆฌ ์์ - Backend
04.[Spring Boot] Service ๊ฐ๋ฐ ๋ฐ Test Case ์์ฑ
05.[Spring Boot] Spring Bean๊ณผ ์์กด๊ด๊ณ
06.[Spring Boot] Java Code๋ก ์ง์ Spring Bean ๋ฑ๋ก
07.[Spring Boot] ๋ฑ๋ก, ๋ชฉ๋ก ๋ณด๊ธฐ ๊ตฌํํ๊ธฐ
08.[Spring Boot] ๊ธฐ์กด ์ฝ๋ ์ ์๋๊ณ , ์ค์ ์ผ๋ก ๊ตฌํ Class ๋ณ๊ฒฝ
09.[Spring Boot] ํตํฉ Test
10.[Spring Boot] JPA
11.[Spring Boot] Spring Data JPA
12.[Spring Boot] AOP
๐ Integration Test
ํตํฉ ํ ์คํธ๋ ๋จ์ ํ ์คํธ์ ๊ฐ์ด ๊ธฐ๋ฅ ๊ฒ์ฆ์ด ์๋, Spring์์ ์ค์ ์ด์ ํ๊ฒฝ๊ณผ ๊ฐ์ด ์ ์ฒด Flow๊ฐ ์ ๋๋ก ๋์ํ๋์ง ํ์ธํ๋ Test์ธ ๊ฒ์ด์์.
์ฌ๊ธฐ์ @SpringBootTest๊ฐ ์ฌ์ฉ์ด ๋๋๋ฐ, ์ด๊ฒ์ @SpringBootApplication์ ์ฐพ์๊ฐ์ ๋ชจ๋ Bean์ Scanํ๊ฒ ๋์ํ๋ต๋๋ค.
๋ฐ๋ผ์ ๋ชจ๋ Bean์ Loadํ๊ธฐ ๋๋ฌธ์ ๋ฌด๊ฒ๊ฒ ๋์ํ๋ ๋จ์ ์ด ์๋ต๋๋ค. ๊ทธ๋ฆฌ๊ณ , Test ๋จ์๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊น ์ด ์ด๋ ค์ด ํธ์ด์์
์ฌ์ค ํตํฉ Test๋ณด๋ค๋ ๋จ์ Test์ ์ง์คํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด์์. ์ด์ฉ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ๋จ์ Test Code ์์ฑ ๊ณต๋ถ๋ฅผ ํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํฉ๋๋ค!
MemberServiceIntegrationTest.java
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.jupiter.api.Assertions.assertThrows;
@SpringBootTest
// DB์ Data๋ฅผ ์ ์ฅํ ๋ค Spring์ด Test๋ฅผ ํ ๋ค์ DATA๋ฅผ ์ง์(RollBack)์ฃผ๊ธฐ ์ํด ์ฌ์ฉ
@Transactional
class MemberServiceIntegrationTest {
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;
@Test
// @commit ์ด๊ฒ์ ์ฌ์ฉํ๋ฉด DB์์ RollBack์ด ์๋ commit์ ํด ๋ฒ๋ ค์ Data๋ฅผ ์
๋ ฅํด ๋ฒ๋ฆฐ๋ค.
void ํ์๊ฐ์
() {
// given(๋ฌด์์ธ๊ฐ ์ฃผ์ด์ก์ ๋)
Member member = new Member();
member.setName("JunyHarang");
// when(์ด๊ฒ์ ์คํ ํ์ ๋)
Long saveId = memberService.join(member);
// then(๊ฒฐ๊ณผ๊ฐ ์๋์ ๊ฐ์ด ๋์์ผ ํ๋ค. (๊ฒ์ฆ๋ถ))
Member findMember = memberService.findOne(saveId).get();
Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
} // ํ์๊ฐ์
() ๋
@Test
public void ์ค๋ณตํ์_์์ธ() {
// given
Member member1 = new Member();
member1.setName("JunyHarang");
Member member2 = new Member();
member2.setName("JunyHarang");
// when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
Assertions.assertThat(e.getMessage()).isEqualTo("์ด๋ฏธ ์กด์ฌํ๋ ํ์ ์
๋๋ค.");
//then
}
@Test
void findMembers() {
} // findMembers() ๋
@Test
void findOne() {
} // findOne() ๋
} // Class ๋
- @SpringBootTest : Spring Container์ ํจ๊ป Test๋ฅผ ์คํ
Spring Boot๋ ํด๋น Annotation์ ํตํด Application Test์ ํ์ํ ๊ฑฐ์ ๋ชจ๋ ์์กด์ฑ ์ ๊ณต
(JUnit4 ์ฌ์ฉ์ ํด๋น Annotation์ Junit์ SpringJUnit4ClassRuner์ ์์ ๋ฐ๋
@RunWith(SpringRynnver.class)๋ฅผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋, JUnit5๋ ํ์ ์๋ค.) - @Transactional : Test Case์ ์ด Annotation์ด ์๋ค๋ฉด Test ์์ ์ ์ Transation์ ์์ํ๊ณ , Test ์๋ฃ ๋ค ํญ์ Roll Back์
์ค์ํ๋ค. ๋ฐ๋ผ์ DB์ Data๊ฐ ๋จ์ง ์๊ธฐ ๋๋ฌธ์ ๋ค์ Test์ ์ํฅ์ ๋ฐ์ง ์๊ณ , ๋ฐ๋ณต Test๊ฐ ๊ฐ๋ฅํ๋ค. - @commit : Transactionl๊ณผ ๋ฐ๋๋ก Test๋ฅผ ์คํํ๋ฉด์ ์ฌ์ฉ๋ Data๋ฅผ DB์ ๊ทธ๋๋ก ์ ์ฅํ๋ค.
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์ จ๋์? ๊ตฌ๋ ๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค
'Back-End ์์ ์ค > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] Spring Data JPA (0) | 2021.08.19 |
---|---|
[Spring Boot] JPA (0) | 2021.08.18 |
[Spring Boot] ๊ธฐ์กด ์ฝ๋ ์ ์๋๊ณ , ์ค์ ์ผ๋ก ๊ตฌํ Class ๋ณ๊ฒฝ (0) | 2021.08.15 |
[Spring Boot] ๋ฑ๋ก, ๋ชฉ๋ก ๋ณด๊ธฐ ๊ตฌํํ๊ธฐ (0) | 2021.08.14 |
[Spring Boot] Java Code๋ก ์ง์ Spring Bean ๋ฑ๋ก (0) | 2021.08.13 |