๐Ÿ’ป ๊ณต๋ถ€ ๊ธฐ๋ก/โ˜• 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

'๐Ÿ’ป ๊ณต๋ถ€ ๊ธฐ๋ก > โ˜• Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Java | Thread / Runnable  (0) 2023.03.07
Java | Session  (1) 2023.01.18
Java | Cookie  (0) 2023.01.17
Java | StringBuilder  (0) 2023.01.17
Java | ๋ฌธ์ž์—ด JSON ๋ณ€ํ™˜  (0) 2023.01.17
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.