ํ ์คํธ ์ฝ๋๋ ์์ฑํ ์ฝ๋๊ฐ ์๋๋๋ก ์ ๋์ํ๊ณ ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ์๋๋ ํ์ธํ ๋ชฉ์ ์ผ๋ก ์์ฑํ๋ ์ฝ๋์ด๋ค.
ํ์ฌ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ค๋ฌด์์ ํ ์คํธ ์ฝ๋์ ์ฌ์ฉ์ ๋งค์ฐ ์ค์ํด์ก๋ค.
์ฝ๋์ ๋์์ ๊ฒ์ฆํ๊ณ , ์ ์ง๋ณด์์ํ๊ธฐ์ ๋งค์ฐ ์ข๊ณ , ๊ฐ๋ฐ์ ์์ฒด๊ฐ ๋ฌด์์ ๋ง๋ค๊ณ ์๋์ง ์ ํํ ์ธ์งํ ์ ์๊ฒ ๋๋ฉฐ,
์์์น ๋ชปํ ๋ฌธ์ ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐ๊ฒฌํด ๋ถ๋ด์ ๋์ด์ฃผ๋ ์ฅ์ ์ ์ป์ ์ ์๋ค.
๋ ๋ํ, ์ฌ์ค์ ํ ์คํธ ์ฝ๋๋ฅผ ์ฒ์ ์ ํ์ ๋๋ ์ด๋ ต๊ธฐ๋ ํ๊ณ , ์ด๊ฒ ๊ตณ์ด ํ์ํ ๋ถ๋ถ์ธ๊ฐ? ์ถ์ด ๋ฑํ ์ค์ํ์ง ์๋ค๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง, ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํ์คํ ํฐ ํ๋ก์ ํธ๋ฅผ ์คํํ ๋ ๋ง์ ๋์์ด ๋จ์ ๋๋ผ๊ณ ๊ณต๋ถ๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ํ๊ฒ ๋์๋ค.
ํ ์คํธ ์ฝ๋๋ ์ฃผ๋ก V๋ชจ๋ธ์ ๋ฐ๋ผ ์๊ฐ ํด ๋ณผ ์ ์๋ค.
V๋ชจ๋ธ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์๊ฐํํ ๋ชจ๋ธ๋ก ํ ์คํธ ๋จ๊ณ๊ฐ ๊ฐ๋ฐ ๋จ๊ณ๊ฐ ์ผ์นํ๋๋ก ํ๋ ๊ณผ์ ์ด๋ผ๊ณ ํ ์ ์๋ค. (CS ์ง์์_์ ์ฒ๊ธฐ ์ํ ๋ด์ฉ!!)
ํ ์คํธ ์ฝ๋๋ ๋จ์ํ ์คํธ, ํตํฉํ ์คํธ, ์์คํ ํ ์คํธ, ์ฌ์ฉ์์ธ์ ํ ์คํธ ๋ฑ ๋ค์ํ ๋จ๊ณ๋ก ์์ฑ๋ ์ ์๋ค.
์ด๋ฌํ ํ ์คํธ๋ค์ ์ ์ถ๋ ฅ ๊ฐ์ ํตํด ๋ค์ํ ์ธก๋ฉด์ ๊ณ ๋ คํ๊ฒ ๋๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์ํํธ์จ์ด๋ฅผ ํ๊ฐํ๊ฒ ๋๋ค.

ํ ์คํธ ์ฝ๋๋?
ํ ์คํธ ์ฝ๋๋ test ๋๋ ํ ๋ฆฌ์์ ์์ ํ ์ ์๋ค.
spring boot ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ test directory๋ฅผ ๋ณผ ์ ์๋ค.

ํ ์คํธ ์ฝ๋์๋ ๋ค์ํ ํจํด์ด ์๋ค.
๊ทธ ์ค, ๋ง์ด ์ฌ์ฉํ๋ ํจํด์ given - when - then ํจํด์ด ์๋ค.
- Given ์ ํ ์คํธ ์คํ์ ์ค๋นํ๋ ๋จ๊ณ์ด๋ค.
- When ์ ํ ์คํธ๋ฅผ ์งํํ๋ ๋จ๊ณ์ด๋ค.
- Then ์ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๋ ๋จ๊ณ์ด๋ค.
์ฌ์ค ์ด๋ ๊ฒ ์ค๋ช ํด๋ ์ง์ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๋ ๊ฒ์ด ์ค์ํ๋ค
์๋ฅผ ๋ค์ด ์๋ก์ด ๋ฉ๋ด๋ฅผ ์ ์ฅํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ๋ค.
@DisplayName("์๋ก์ด ๋ฉ๋ด ์ ์ฅ") //ํ
์คํธ ์ผ์ด์ค์ ์ด๋ฆ ์ค์
@Test //JUnit ํ
์คํธ ๋ฉ์๋์์ ์ ์ธํ๋ค.
public void saveMenuTest() {
//given : ๋ฉ๋ด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์ ์ฒ๋ฆฌ ๊ณผ์
final String name = "์นดํ๋ผ๋ผ"; //์๋ก ์ถ๊ฐํ ๋ฉ๋ด์ ์ด๋ฆ ์ค์
final int price = 1500; //์๋ก ์ถ๊ฐํ ๋ฉ๋ด์ ๊ฐ๊ฒฉ์ ์ค์
fianl Menu caffeLatte = new Menu(name, price); //"์นดํ๋ผ๋ผ" ๋ฉ๋ด๋ฅผ ์์ฑ ๋ฐ ์ด๊ธฐํ์ํค๋ ๊ณผ์ .
//when : ์ค์ ๋ฉ๋ด ์ ์ฅ
final long saveNum = menuService.save(caffeLatte); //๋ฉ๋ด๋ฅผ ์ ์ฅํ๊ณ ์ ์ฅ๋ ๋ฉ๋ด์ ๋ฒํธ๋ฅผ ๋ฐํํ๋ค.
//then : ๊ฒ์ฆ
final Menu savedMenu = menuService.findById(saveId).get(); //์ ์ฅ๋ ๋ฉ๋ด๋ฅผ ๊ฒ์ํ์ฌ ๊ฐ์ ธ์จ๋ค.
assertThat(savedMenu.getName()).isEqualTo(name); //์ ์ฅ๋ ๋ฉ๋ด์ ์ด๋ฆ์ด ์๋ํ ๊ฒฐ๊ณผ์ ์ผ์นํ๋์ง ํ์ธํ๋ค. -> asserthat()์ ๊ฒ์ฆ์ ์ํ ๋ฉ์๋์ด๋ค.
assertThat(savedMenu.getPrice()).isEqualTo(price); //์ ์ฅ๋ ๋ฉ๋ด์ ๊ฐ๊ฒฉ์ด ์๋ํ ๊ฒฐ๊ณผ์ ์ผ์นํ๋์ง ํ์ธํ๋ค.
}
์ด๊ฑด ๋จ์ํ ํ ์คํธ ์ฝ๋ ์์ ์ด๋ค.
given์ ์ ํตํด ๋ฉ๋ด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ค๋นํ๊ณ , when ์ ์ ํตํด ์ค์ ๋ก ๋ฉ๋ด๋ฅผ ์ ์ฅํ๊ณ , then์ ์ ํตํด ๋ฉ๋ด๊ฐ ์ ์ถ๊ฐ๋์๋์ง ๊ฒ์ฆํ ์ ์๋ค.
์คํ๋ง ๋ถํธ์ ํ ์คํธ ๋๊ตฌ
์คํ๋ง ๋ถํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ๊ธฐ ์ํ ๋๊ตฌ์ ์ ๋ํ ์ด์ ์ ์ ๊ณตํ๋ค.
springboot-starter-test ์คํํฐ์ ํ ์คํธ๋ฅผ ์ํ ๋๊ตฌ๊ฐ ๋ชจ์ฌ ์์ด์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์คํ๋ง ๋ถํธ ์คํํฐ ํ ์คํธ ๋ชฉ๋ก
- JUnit : ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ฉ ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ
- AssertJ : ๊ฒ์ฆ๋ฌธ์ธ assertion์ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Spring Test & Spring Boot Test : ์คํ๋ง ๋ถํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ํตํฉ ํ ์คํธ ์ง์
- Hamcrest : ํํ์์ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋๋ฐ ์ฌ์ฉ๋๋ Matcher ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Mockito : ํ ์คํธ์ ์ฌ์ฉํ ๊ฐ์ง ๊ฐ์ฒด์ธ ๋ชฉ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ณ , ๊ด๋ฆฌ,๊ฒ์ฆํ ์ ์๊ฒ ์ง์ํ๋ ํ ์คํธ ํ๋ ์์ํฌ
- JsonPath : JSON ๋ฐ์ดํฐ์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๊ณ ๊ฒ์ํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- JSONassert : JSON์ฉ assertion ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ด ์ค JUnit๊ณผ AssertJ๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค.
๋ฟ๋ง ์๋๋ผ ์ด ๋ค์ํ ๋๊ตฌ๋ค์ ์กฐํฉํ์ฌ ํจ์จ์ ์ธ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋๋ค.
๋ ์์ธํ ์คํํฐ ํ ์คํธ ๋๊ตฌ์ ๋ํด์๋ ๋ค์ ๊ธ์ ํตํด ๋ค๋ค๋ณผ ์์ ์ด๋ค.
'๐ฉ๐ปโ๐ป Developer > ์ ์ ๊ฐ๋ฐ์ ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL๊ณผ NoSQL์ ์ฐจ์ด๋? (0) | 2024.03.27 |
---|---|
JPA ์ Mybatis๋ ๋ฌด์์ธ๊ฐ? / JPA์ Mybatis์ ์ฐจ์ด (1) | 2024.03.26 |
[๋คํธ์ํฌ] REST API๋? (0) | 2024.03.14 |
์ํคํ ์ฒ, ํ๋ ์์ํฌ๋ ๋ฌด์์ธ๊ฐ? (0) | 2024.03.13 |
[๊ธฐ๋ณธ ์ง์] Node.js๋? (1) | 2024.03.08 |
๋๊ธ