๐Ÿต java

JAVA | ์‚ฌ์น™ ์—ฐ์‚ฐ ๊ณ„์‚ฐ๊ธฐ ์‹ค์Šต - (1)

c0zi 2023. 8. 15. 18:55

๐Ÿงฎ ์‚ฌ์น™ ์—ฐ์‚ฐ ๊ณ„์‚ฐ๊ธฐ ์‹ค์Šต

์š”๊ตฌ์‚ฌํ•ญ
• ๊ฐ„๋‹จํ•œ ์‚ฌ์น™์—ฐ์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. โ˜‘๏ธ
• ์–‘์ˆ˜๋กœ๋งŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
• ๋‚˜๋ˆ—์…ˆ์—์„œ 0์„ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ IllegalArgument ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
• MVCํŒจํ„ด(Model-View-Controller) ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

1. ๋ง์…ˆ ๋บ„์…ˆ ์—ฐ์‚ฐ ์ˆ˜ํ–‰

 

public class CalculatorTest {

    // 1 + 2 ---> Calculator
    //   3   ---<
    @DisplayName("๋ง์…ˆ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.")
    @Test
    void additionTest() {
        int result = Calculator.calculate(1, "+", 2);

        assertThat(result).isEqualTo(3);
    }
    
    @DisplayName("๋บ„์…ˆ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค")
    @Test
    void subtractionTest() {
        int result = Calculator.calculate(2, "-", 1);

        assertThat(result).isEqualTo(1);
    }
}
public class Calculator {
    public static int calculate(int operand1, String operator, int operand2) {
        if ("+".equals(operator)) {
            return operand1 + operand2;
        } else if ("-".equals(operator)) {
            return operand1 - operand2;
        }
        return 0;
    }
}

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•œ ๋’ค Make Test Pass๋ฅผ ์œ„ํ•ด Calculator๋ฅผ ์•Œ๋งž๊ฒŒ ์ž‘์„ฑํ•ด์ค€๋‹ค.

 


2. ์‚ฌ์น™ ์—ฐ์‚ฐ ํ•œ๋ฒˆ์— ํ…Œ์ŠคํŠธํ•˜๊ธฐ

 

public class CalculatorTest {
    @DisplayName("์‚ฌ์น™ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.")
    @ParameterizedTest
    @MethodSource("fomulaAndResult")
    void calculatorTest(int operand1, String operator, int operand2, int expect) {
        int result = Calculator.calculate(operand1, operator, operand2);
        assertThat(result).isEqualTo(expect);
    }

private static Stream<Arguments> fomulaAndResult() {
        return Stream.of(
                arguments(1, "+", 2, 3),
                arguments(1, "-", 2, -1),
                arguments(1, "*", 2, 2),
                arguments(1, "/", 1, 1)
        );
    }
}
public class Calculator {
    public static int calculate(int operand1, String operator, int operand2) {
        if ("+".equals(operator)) {
            return operand1 + operand2;
        } else if ("-".equals(operator)) {
            return operand1 - operand2;
        } else if ("*".equals(operator)) {
            return operand1 * operand2;
        } else if ("/".equals(operator)) {
            return operand1 / operand2;
        }
        return 0;
    }
}

 

์‚ฌ์น™์—ฐ์‚ฐ์„ ํ•œ๋ฒˆ์— ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” stream์„ ์ด์šฉํ•œ๋‹ค. formulaAndResult() ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์น™์—ฐ์‚ฐ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค๊ณผ ๊ธฐ๋Œ€๊ฐ’์„ returnํ•œ๋‹ค. @MethodSource ์—๋„ˆํ…Œ์ด์…˜์€ ์ด ๋ฉ”์„œ๋“œ์˜ ๋ฆฌํ„ด๊ฐ’๋“ค์„ calculatorTest() ๋ฉ”์„œ๋“œ์— ๋Œ€์ž…ํ•˜๋„๋ก ํ•œ๋‹ค.

 

calculator ํด๋ž˜์Šค๋„ ์‚ฌ์น™์—ฐ์‚ฐ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.