Bibi's DevLog ๐ค๐
TDD, ํ ์คํธ์ฝ๋ ๊ฐ๋ ๋ฐ Gradle, JUnit ์ด๊ธฐ์ค์ ํ๊ธฐ ๋ณธ๋ฌธ
TDD, ํ ์คํธ์ฝ๋ ๊ฐ๋ ๋ฐ Gradle, JUnit ์ด๊ธฐ์ค์ ํ๊ธฐ
๋น๋น bibi 2021. 2. 10. 18:12TDD์ ํ ์คํธ์ฝ๋
TDD (Test-Driven Development, ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ).
์๋ฐ main๋ฉ์๋
: ํ๋ก๊ทธ๋จ์ ์์ํ๊ณ , ๊ตฌํํ ํ๋ก๊ทธ๋จ์ ํ ์คํธํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
production code : ํ๋ก๊ทธ๋จ ๊ตฌํ์ ๋ด๋นํ๋ ์ฝ๋
test code : production code๊ฐ ์ ์ ๋์ํ๋์ง๋ฅผ ํ์ธํ๋ ์ฝ๋
but..
main๋ฉ์๋๋ก ํ ์คํธํ๋ ๊ฒฝ์ฐ์ ๋ฌธ์ ์
- ํด๋์ค ๋ฐ main๋ฉ์๋๊ฐ ์ปค์ ธ์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ค
- ํ ๋ฉ์๋์ ์ฌ๋ฌ ํ ์คํธ์ฝ๋๊ฐ ์์ด ์ด๋ค ํ ์คํธ๊ฐ ์ด๋ฃจ์ด์ง ๊ฒ์ธ์ง ์๊ธฐ ์ด๋ ต๋ค
- ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์์์ ์ผ์ผ์ด ์ฌ๋์ด ํ์ธํด์ผ ํ๋ค
- ํ ์คํธ์ฝ๋๊ฐ pruduction code์ ํจ๊ป ๋ฐฐํฌ๋ ์ ์๋ค
JUnit๊ณผ AssertJ
JUnit
: ํ
์คํธ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. (๋จ์ ํ
์คํธ ํ๋ ์์ํฌ์ ํ๋)
AssertJ
: ๋ค์ํ assertion์ ์ ๊ณตํ๋ ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- ํ
์คํธ ์ฝ๋๊ฐ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ์ฝํ๋๋ก ํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
์ฆ, ์๋ฌ๋ฉ์์ง์ ํ ์คํธ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํฌ๊ฒ ๋์ฌ์ค๋ค.
(JUnit์ด ์ ๊ณตํ๋๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋๋ณด๋ค ๊ฐ๋ ์ฑ์ด ํจ์ฌ ๋์์ง๋ค)
ํ๋ก์ ํธ๋ฅผ ์ํ gradle๊ณผ testํด๋ ์ด๊ธฐ์ค์ ํ๊ธฐ (Java8, IntelliJ)
ํจ๊ป ์ค์์ ๊ณต๋ถํ๋ ํ๋ ๋
๊ฐ ๋์์ ์ฃผ์
จ๋ค. ์ฒ์ฒํ ๊ฐ๋ฅด์ณ ์ฃผ์
์ ์๋์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค๐โโ๏ธ๐โโ๏ธ(์-๋ฉ)
์๋๋ ๊ฐ๋ฅด์ณ ์ฃผ์ ๋ด์ฉ์ ๊ธฐ๋ก ๋ฐ ์ ๋ฆฌํ ๊ฒ์ ๋๋ค.
1
์๋ฐ๋ ์ปดํ์ผ ์ธ์ด์ด๋ค.
์ฆ, .java
ํ์ผ์ ์คํ์ํค๋ ๊ฒ ์๋, .java
์ ์ปดํ์ผ ๊ฒฐ๊ณผ์ธ .class
ํ์ผ์ ์คํ์ํค๋ ๊ฒ์ด๋ค.
javac ํ์ผ.java
๋ช
๋ น์ผ๋ก ์ปดํ์ผ ํ ๋ค, java ํ์ผ.class
๋ก ์คํํ๋ค.
ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ์ฒ์ ์ค์ ํ ๋๋,
IntelliJ์ ๊ฐ์ IDE์
์ฅ์์๋ ์คํํ .class
ํ์ผ์ด ๋ด๊ธด ๊ฒฝ๋ก๋ฅผ ์์์ผ ํ๋ค.
์ด๋ฅผ classpath ์ค์ ์ด๋ผ๊ณ ํ๋ค.
2
gradle ์ฌ์ฉํ ๋๋ classpath๊ฐ ์ค์ ๋์ด ์๋์ง ํ์ธํด์ผ ํ๋ค.
ํ๋ก์ ํธ์
build.gradle
ํ์ผ (์ฝ๋ผ๋ฆฌ ์์ด์ฝ)์ ๋๋ฌapply plugin: 'java'
๊ฐ ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ค.gradle์ ๊ธฐ๋ณธ์ ์ผ๋ก
build
ํด๋ ๋ด๋ถ์ ์ปดํ์ผ๋ ์์ค ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ์ค๋ค.
ํ๋ก์ ํธ์build
-classes
ํด๋๋ฅผ ๋๋ฌsrc
ํด๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ปดํ์ผ๋ ์์ค๊ฐ ์๋์ง ํ์ธํ๋ค.
ํด๋น ํด๋์ ํ์ผ&ํด๋๊ฐ ๋ง๋ค์ด์ ธ ์๋ค๋ฉด IDE๊ฐ gradle์ ํตํด ์ ๋๋ก ๋น๋๋ฅผ ํด ์ค ๊ฒ์ด๊ณ (์ปดํ์ผ์ด ์ ๋ ๊ฒ), ์๋ค๋ฉด IDE๊ฐ ํด๋น ํ์ผ&ํด๋๊ฐ ๋ฌด์์ธ์ง ๋ชฐ๋ผ ๋น๋๋ฅผ ํ์ง ๋ชปํ ๊ฒ(์ปดํ์ผ์ด ์ ๋์ง ์์ ๊ฒ)์ด๋ค.๊ธฐ๋ณธ์ ์ผ๋ก ์ธํ ๋ฆฌJ์์ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋๋ srcํด๋๊ฐ ์๋์ผ๋ก ์กํ ์์ง๋ง,
๊ฐ๊ธ์ ์๋์ ๊ฐ์ ํด๋๊ตฌ์กฐ(ํ์ค)๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ข๋ค (gradle ์ฌ์ฉ์ฌ๋ถ์ ๊ด๊ณ์์ด)- ์์ค ์ฝ๋ : ํ๋ก์ ํธ ํ์์
/src/main/java
ํด๋๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๋ฐ์ ๊ตฌํํด์ผ ํ๋ค. - ํ
์คํธ ์ฝ๋ : ํ๋ก์ ํธ ํ์์
/src/test/java
ํด๋๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๋ฐ์ ๊ตฌํํด์ผ ํ๋ค.
- ์์ค ์ฝ๋ : ํ๋ก์ ํธ ํ์์
ํ์ค์ฌํญ ์ธ์ ๋ณ๋๋ก ์ค์ ํ๊ณ ์ถ์ ์ต์ ์ด ์๋ค๋ฉด
build.gradle
ํ์ผ ๋ด์ ์ค์ ํด์ผ ํ๋ค.
gradle๋ก ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๋ฉด, gradle์ ๋งค๋ฒ ์ด๊ธฐํ ํ ๋ค์build.gradle
๋ด์ฉ์ ๋ฐ๋ผ ์คํํ๊ธฐ ๋๋ฌธ์ด๋ค.- ์ฐ๋ฆฌ๋ ๋ฏธ์
์์
build.gradle
ํ์ผ์ด ์ ํ ๋์ด ์ฃผ์ด์ก์ผ๋ ๊ทธ๋๋ก ๋ฐ๋ฅด๋ฉด ๋๋ค.
- ์ฐ๋ฆฌ๋ ๋ฏธ์
์์
3
ํ ์คํธ ํด๋์ ํ ์คํธ ์ฝ๋
๊ฐ๊ธ์ ์ธํ ๋ฆฌJ์์ ์๋์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ธฐ๋ฅ์ ํ์ฉํ์.
ํ ์คํธ ํด๋
:src
์๋์test
๋๋ ํ ๋ฆฌ ์์ฑ ์์ ์, ์๋์ ํ์๋๋ ์ด๋ก์ ํด๋๋ฅผ ๋๋ฌ์ ์์ฑ.ํ ์คํธ ์ฝ๋
ํ ์คํธ์ฝ๋๋ฅผ ๋ง๋ค์ด์ผ ํ๋
.java
ํ์ผ์์ ํด๋์ค๋ช ์ ํด๋ฆญํ ๋ค,
Alt
+Insert
๋จ์ถํค๋กGenerate
์ฐฝ์ ์ด๊ณTest
๋ฅผ ๋๋ฅธ๋ค.Testing library๋ก
JUnit5
๋ฅผ ์ง์ ํ๊ณ OK๋ฅผ ๋ ๋ฒ ๋๋ฅธ๋ค./src/test/java
ํด๋ ์๋์main
๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋กํด๋์ค๋ช Test
๋ผ๋ ํ ์คํธ ํ์ผ์ด ์์ฑ๋๋ค.ํด๋น ํด๋์ค์ ํ ์คํธ ๋ฉ์๋๋ฅผ ์์ฑํด ํ ์คํธ๋ฅผ ์งํํ๋ค.
4
JUnit ์ฌ์ฉ์ฑ์ ๋์ฌ ์ฃผ๋ ์ต์ (IntelliJ)
- Settings
- Build, Execution, Deployment
- Build tools - Gradle
- Build and run using๊ณผ Run tests using ํญ๋ชฉ์ Gradle์์ IntelliJ IDEA๋ก ๋ฐ๊ฟ ์ค๋ค.