๐ป ๊ณต๋ถ ๊ธฐ๋ก/โ Java Java | TDD - ๐ ํ ์คํธ ์ฝ๋์ ๋ํ ๊ฐ๋จ ๋ด์ฉ ํ ์คํธ ์ฝ๋๋ฅผ ์ ํ์ฉํ์ง ์์ ๊ฐ์๋ฅผ ํตํด ๊ธฐ์ด๋ฅผ ๋ค์ก๋ค. 23. 3. 10. ๐ ํ ์คํธ ์ฝ๋ ์ค์ต ๐ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ด์ ? ๋ฌธ์ํ ์ญํ ์ฝ๋์ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๊ธฐ ์ํจ ๋ฆฌํฉํ ๋ง ์ ์์ ์ฑ ํ๋ณด ํ ์คํธ ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด ๋ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์ง ์ค mvmthyun.tistory.com ๐ ํ ์คํธ ์ฝ๋ ์ค์ต ์ด ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์์ ํ์๋๋ฐ ๋ ์ ์ด๊ฒ์ ๋ณด๊ณ ๋ ์๋ฌด๊ฒ๋ ๋๋ ๊ฒ์ด ์์๋ ์ถ์๋ค.ํ ์คํธ ์ฝ๋ ์ค์ต ์ค๋ฐ๋ถ๋ฅผ ๋ค์ด์๊ณ ์์ผ๋ก ๊นจ๋ฌ์์ ๊ธ์ ๊ณผ ํจ๊ป ํ ์คํธ ์ฝ๋์ ์ค์์ฑ์ ์ ์ ์์๋ค. TDD ๐ ํ์ฉ ๋จ์ถํค Alt + Ins(Insert): Generate ๋ฉ์๋ ์์ฑAlt + Enter: ์์ง ์์ฑํ์ง ์์ ํด๋์ค ์ด๋ฆ์ ์ปค์๋ฅผ ๋๊ณ ๋จ์ถํค ์คํ(=> ํด๋์ค ์์ฑ)Ctrl + Alt + V: ๊ฐ์ ๋ด์ฉ์ ๋์ผํ ์ฝ๋ ํ ๋ถ๋ถ์ ๋๋๊ทธ ํ ๋จ์ถํค ์คํ(=> 2๊ฐ ์ด์์ ํญ๋ชฉ์ ๋ฐ๊พธ๊ธฐ ์ ํ, ๋ณ์ ์์ฑ)Ctrl + Alt + C: " " ์์ ๋ฌธ์์ด์ ๋๋๊ทธ ํ ๋จ์ถํค ์คํ(=> ๋ฌธ์์ด์ ๋ํ ์๋ก์ด String ๋ณ์ ์ ์) ํจํค์ง ๊ตฌ์ฑ ๐ Test fails ์คํ์ 100% ์คํจ : 'PasswordValidator.class' ๋ฅผ ์์ฑํ์ง ์์๊ธฐ ๋๋ฌธ์ ์คํจ /** * ๋น๋ฐ๋ฒํธ๋ ์ต์ 8์ ์ด์ 12์ ์ดํ์ฌ์ผ ํ๋ค. * ๋น๋ฐ๋ฒํธ๊ฐ 8์ ๋ฏธ๋ง ๋๋ 12์ ์ด๊ณผ์ธ ๊ฒฝ์ฐ IllegalArgumentException ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค. * ๊ฒฝ๊ณ์กฐ๊ฑด์ ๋ํด ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค. */ public class PasswordValidatorTest { @DisplayName("๋น๋ฐ๋ฒํธ๊ฐ ์ต์ 8์ ์ด์, 12์ ์ดํ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.") @Test void validatePasswordTest() { assertThatCode(() -> PasswordValidator.validate("serverwizard")) .doesNotThrowAnyException(); } } ๐ Test passes ํต๊ณผํ๊ธฐ ์ํ ์ฝ๋ ์์ฑ: 'PasswordValidator.class' ์์ฑํ ์คํธ ํ์ผ์์ ๋ค์ ์คํ ํ ์คํจ/ํต๊ณผ ํ์ธ public class PasswordValidator { public static void validate(String password) { if(password.length() < 8 || password.length() > 12) { throw new IllegalArgumentException("๋น๋ฐ๋ฒํธ๋ ์ต์ 8์ ์ด์ 12์ ์ดํ์ฌ์ผ ํ๋ค."); } } } ๐ Refactor ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ์ ์ง๋ณด์์ ์ฉ์ดํ๊ธฐ ์ํด ๊ทธ๋ฆฌ๊ณ ๊ฐ์์์ ๊ฐ์กฐํ๋ ์ฌ๋ฆฌ์ ์์ ๊ฐ์ ์ฃผ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ฌ์กฐ์ ํ๋ค. public class PasswordValidator { public static final String WRONG_PASSWORD_LENGTH_EXCEPTION_MESSAGE = "๋น๋ฐ๋ฒํธ๋ ์ต์ 8์ ์ด์ 12์ ์ดํ์ฌ์ผ ํ๋ค."; public static void validate(String password) { int length = password.length(); if(length < 8 || length > 12) { throw new IllegalArgumentException(WRONG_PASSWORD_LENGTH_EXCEPTION_MESSAGE); } } } ์ถ์ฒ | hyeonseok Ahn ๊ณต์ ํ๊ธฐ URL ๋ณต์ฌ์นด์นด์คํก ๊ณต์ ํ์ด์ค๋ถ ๊ณต์ ์์ค ๊ณต์ ๊ฒ์๊ธ ๊ด๋ฆฌ ๊ตฌ๋ ํ๊ธฐMOVEMENT.DEV Contents ๐ํ ์คํธ์ฝ๋์๋ํ๊ฐ๋จ๋ด์ฉ ๐ํ ์คํธ์ฝ๋์ค์ต ๐ ํ์ฉ๋จ์ถํค ๐Testfails ๐ Testpasses ๐Refactor ๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ Java | Thread / Runnable 2023.03.07 Java | Session 2023.01.18 Java | Cookie 2023.01.17 Java | StringBuilder 2023.01.17 ๋๊ธ 0 + ์ด์ ๋๊ธ ๋๋ณด๊ธฐ