From 74f7544a30f354568c5327b4d62f5b35e61ed989 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 8 May 2024 01:02:53 +0900 Subject: [PATCH 01/40] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EB=AA=85?= =?UTF-8?q?=EC=84=B8=EC=84=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/README.md diff --git a/src/main/java/README.md b/src/main/java/README.md new file mode 100644 index 00000000..e883770c --- /dev/null +++ b/src/main/java/README.md @@ -0,0 +1,17 @@ +## Step1 +### 기능 요구사항 +인자 2개를 받아 사칙연산을 할 수 있는 계산기를 구현한다. +사칙연산과 매칭되는 4개의 메서드를 제공한다. +계산된 결과는 정수를 반환한다. + +### 새로운 프로그래밍 요구사항 +메인 메서드는 만들지 않는다. + +### 단위 테스트 +작은 단위로 테스트 할 것. + +### ToDo +- 사칙연산 구현하기 +- 단위 테스트 실행하기 +- JUnit 공부하기 +- JUnit 활용하기 From 903f21dc69266b0340524ae52ac50756c7b3df36 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 8 May 2024 02:17:04 +0900 Subject: [PATCH 02/40] =?UTF-8?q?feat:=20=EA=B8=B0=EC=B4=88=EC=A0=81?= =?UTF-8?q?=EC=9D=B8=20=EA=B3=84=EC=82=B0=EA=B8=B0=20=EC=B4=88=EA=B8=B0=20?= =?UTF-8?q?=EB=8B=A8=EA=B3=84=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/model/Calculator.java | 27 +++++++++++++++++++++++++++ src/main/java/view/InputView.java | 18 ++++++++++++++++++ src/main/java/view/OutputView.java | 23 +++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 src/main/java/model/Calculator.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/OutputView.java diff --git a/src/main/java/model/Calculator.java b/src/main/java/model/Calculator.java new file mode 100644 index 00000000..0e10b560 --- /dev/null +++ b/src/main/java/model/Calculator.java @@ -0,0 +1,27 @@ +package model; + +import view.InputView; + +import java.util.List; + +public class Calculator { + List realNumber = InputView.getNumber(); + int num1 = realNumber.get(0); + int num2 = realNumber.get(1); + + public int addNumbers(){ + return num1 + num2; + } + + public int subNumbers(){ + return num1 - num2; + } + + public int divideNumbers(){ + return num1/num2; + } + + public int multipleNumbers(){ + return num1 * num2; + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000..4d7ea2d0 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,18 @@ +package view; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class InputView { + public static List getNumber(){ + Scanner input = new Scanner(System.in); + System.out.println("두 정수를 입력하세요. (입력 순서대로 계산, 쉼표(,)로 구분)"); + String inputNumber = input.next(); + String[] inputNumberList = inputNumber.split(","); + List numbers = new ArrayList<>(); + for (String intList : inputNumberList){ + numbers.add(Integer.parseInt(intList)); + } + return numbers; + } +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 00000000..48acab93 --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,23 @@ +package view; + +import model.Calculator; + +public class OutputView { + Calculator calculator = new Calculator(); + public void printAddResult(){ + System.out.println("덧셈 결과는 " + calculator.addNumbers() + "입니다."); + } + + + public void printSubResult(){ + System.out.println("뺄셈 결과는 " + calculator.subNumbers() + "입니다."); + } + + public void printDivideResult(){ + System.out.println("나눗셈 결과는 " + calculator.divideNumbers() + "입니다."); + } + + public void printMultipleResult(){ + System.out.println("곱셈 결과는 " + calculator.multipleNumbers() + "입니다."); + } +} From 28230029fae7acc3e239c93765abce496b18864b Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 8 May 2024 21:16:58 +0900 Subject: [PATCH 03/40] =?UTF-8?q?Docs:=20TODO=20=EC=84=B8=EB=B6=84?= =?UTF-8?q?=ED=99=94=20=ED=9B=84=20README=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/README.md b/src/main/java/README.md index e883770c..91806191 100644 --- a/src/main/java/README.md +++ b/src/main/java/README.md @@ -12,6 +12,7 @@ ### ToDo - 사칙연산 구현하기 -- 단위 테스트 실행하기 + - 최대한 MVC 구조로 구현하기 - JUnit 공부하기 -- JUnit 활용하기 +- JUnit 활용하기 + - 단위 테스트 구현하기 From b0c6ed179ea00b75c82834e7bb488f42190c65ba Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 8 May 2024 21:37:49 +0900 Subject: [PATCH 04/40] =?UTF-8?q?Remove:=20OutputView=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/OutputView.java | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 src/main/java/view/OutputView.java diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java deleted file mode 100644 index 48acab93..00000000 --- a/src/main/java/view/OutputView.java +++ /dev/null @@ -1,23 +0,0 @@ -package view; - -import model.Calculator; - -public class OutputView { - Calculator calculator = new Calculator(); - public void printAddResult(){ - System.out.println("덧셈 결과는 " + calculator.addNumbers() + "입니다."); - } - - - public void printSubResult(){ - System.out.println("뺄셈 결과는 " + calculator.subNumbers() + "입니다."); - } - - public void printDivideResult(){ - System.out.println("나눗셈 결과는 " + calculator.divideNumbers() + "입니다."); - } - - public void printMultipleResult(){ - System.out.println("곱셈 결과는 " + calculator.multipleNumbers() + "입니다."); - } -} From 3bfb2cf1f0b2b6d079e0f2e6e4efa85b9b1e9159 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 8 May 2024 21:40:03 +0900 Subject: [PATCH 05/40] =?UTF-8?q?Rename:=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/view/{InputView.java => CalculatorView.java} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename src/main/java/view/{InputView.java => CalculatorView.java} (79%) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/CalculatorView.java similarity index 79% rename from src/main/java/view/InputView.java rename to src/main/java/view/CalculatorView.java index 4d7ea2d0..8ea6102b 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/CalculatorView.java @@ -3,16 +3,16 @@ import java.util.List; import java.util.Scanner; -public class InputView { +public class CalculatorView { public static List getNumber(){ Scanner input = new Scanner(System.in); System.out.println("두 정수를 입력하세요. (입력 순서대로 계산, 쉼표(,)로 구분)"); - String inputNumber = input.next(); - String[] inputNumberList = inputNumber.split(","); + String userInput = input.next(); + String[] inputNumberList = userInput.split(","); List numbers = new ArrayList<>(); for (String intList : inputNumberList){ numbers.add(Integer.parseInt(intList)); } return numbers; } -} +} \ No newline at end of file From ed9a15193f6158b9daaa31b892484a76bbbf7d29 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 8 May 2024 21:40:31 +0900 Subject: [PATCH 06/40] =?UTF-8?q?feat:=20MVC=20=EA=B5=AC=EC=A1=B0=EB=A5=BC?= =?UTF-8?q?=20=EC=9C=84=ED=95=9C=20Controller=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/CalculatorController.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/controller/CalculatorController.java diff --git a/src/main/java/controller/CalculatorController.java b/src/main/java/controller/CalculatorController.java new file mode 100644 index 00000000..1e0e0350 --- /dev/null +++ b/src/main/java/controller/CalculatorController.java @@ -0,0 +1,29 @@ +package controller; +import model.Calculator; +import view.CalculatorView; +import java.util.List; + +public class CalculatorController { + List numbers = CalculatorView.getNumber(); + Calculator calculator = new Calculator(numbers.get(0), numbers.get(1)); + + public void doAdd() { + int addResult = calculator.addNumbers(); + System.out.println("덧셈 결과 : " + addResult); + } + + public void doSub(){ + int subResult = calculator.subNumbers(); + System.out.println("뺄셈 결과 : " + subResult); + } + + public void doDivide(){ + int divideResult = calculator.divideNumbers(); + System.out.println("나눗셈 결과 : " + divideResult); + } + + public void doMultiple(){ + int multipleResult = calculator.multipleNumbers(); + System.out.println("곱셈 결과 : " + multipleResult); + } +} \ No newline at end of file From a082226911ad2d88559a1044b5bc476425271232 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 8 May 2024 21:41:13 +0900 Subject: [PATCH 07/40] =?UTF-8?q?Refactor:=20Controller=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20Caculator=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/model/Calculator.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/model/Calculator.java b/src/main/java/model/Calculator.java index 0e10b560..eaa57cc0 100644 --- a/src/main/java/model/Calculator.java +++ b/src/main/java/model/Calculator.java @@ -1,13 +1,12 @@ package model; - -import view.InputView; - -import java.util.List; - public class Calculator { - List realNumber = InputView.getNumber(); - int num1 = realNumber.get(0); - int num2 = realNumber.get(1); + private final int num1; + private final int num2; + + public Calculator(int num1, int num2){ + this.num1 = num1; + this.num2 = num2; + } public int addNumbers(){ return num1 + num2; @@ -24,4 +23,4 @@ public int divideNumbers(){ public int multipleNumbers(){ return num1 * num2; } -} +} \ No newline at end of file From 5352af01e3f711dcb105a756eb66d56c8ecbc210 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 8 May 2024 22:13:25 +0900 Subject: [PATCH 08/40] =?UTF-8?q?feat:=20Calculator=20Test=20=EC=B4=88?= =?UTF-8?q?=EC=95=88=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/function/CalculatorTest.java | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/test/java/function/CalculatorTest.java diff --git a/src/test/java/function/CalculatorTest.java b/src/test/java/function/CalculatorTest.java new file mode 100644 index 00000000..059955d1 --- /dev/null +++ b/src/test/java/function/CalculatorTest.java @@ -0,0 +1,75 @@ +package function; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CalculatorTest { + @Nested + @DisplayName("입력관련 테스트") + public class InputTest{ + + @DisplayName("입력내용 저장 테스트") + @Test + void inputTest(){ + //given + //when + //then + } + + @DisplayName("문자열 정수 변환 테스트") + @Test + void typeTest(){ + //given + //when + //then + } + } + + @Nested + @DisplayName("계산기능 테스트") + public class functionTest { + + @DisplayName("더하기 테스트") + @Test + void addTest(){ + //given + int expectValue = 3; + //when + //then + assertEquals(realValue, expectValue, "값이 일치합니다."); + } + + @DisplayName("빼기 테스트") + @Test + void subTest(){ + //given + int realValue = x - y; + int expectValue = 1; + //when + //then + } + + @DisplayName("나누기 테스트") + @Test + void divideTest(){ + //given + int realValue = x / y; + int expectValue = 2; + //when + + //then + } + + @DisplayName("곱하기 테스트") + @Test + void multipleTest(){ + //given + int realValue = x * y; + int expectValue = 2; + + //when + //then + } + } +} From 2b11babb346a8e7c198c743b67409912c40e1544 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Sat, 11 May 2024 17:36:33 +0900 Subject: [PATCH 09/40] =?UTF-8?q?feat:=20Calculator=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/function/CalculatorTest.java | 99 ++++++++++++++++------ 1 file changed, 75 insertions(+), 24 deletions(-) diff --git a/src/test/java/function/CalculatorTest.java b/src/test/java/function/CalculatorTest.java index 059955d1..f1b6303e 100644 --- a/src/test/java/function/CalculatorTest.java +++ b/src/test/java/function/CalculatorTest.java @@ -1,75 +1,126 @@ package function; +import model.Calculator; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; public class CalculatorTest { - @Nested - @DisplayName("입력관련 테스트") - public class InputTest{ +// @Nested +// @DisplayName("입력관련 테스트") +// public class InputTest{ +// +// @DisplayName("입력내용 저장 테스트") +// @Test +// void inputTest(){ +// //given +// //when +// //then +// } +// +// @DisplayName("문자열 정수 변환 테스트") +// @Test +// void typeTest(){ +// //given +// //when +// //then +// } +// } - @DisplayName("입력내용 저장 테스트") + @Nested + @DisplayName("계산기능 테스트") + public class functionTest { + int testNum1 = 2; + int testNum2 = 1; + Calculator calculator = new Calculator(testNum1, testNum2); + @DisplayName("더하기 테스트 1") @Test - void inputTest(){ + void addTest(){ //given + int expectValue = 3; + int testAdd = calculator.addNumbers(); //when //then + assertEquals(testAdd, expectValue, "값이 일치하지 않습니다."); } - @DisplayName("문자열 정수 변환 테스트") + @DisplayName("더하기 테스트 2") @Test - void typeTest(){ + void addFailTest(){ //given + int failValue = 0; + int testAdd = calculator.addNumbers(); //when //then + assertNotEquals(testAdd, failValue, "값이 일치합니다!"); } - } - @Nested - @DisplayName("계산기능 테스트") - public class functionTest { - - @DisplayName("더하기 테스트") + @DisplayName("빼기 테스트 1") @Test - void addTest(){ + void subTest(){ //given - int expectValue = 3; + int expectValue = 1; + int testSub = calculator.subNumbers(); //when //then - assertEquals(realValue, expectValue, "값이 일치합니다."); + assertEquals(testSub, expectValue, "값이 일치하지 않습니다."); } - @DisplayName("빼기 테스트") + @DisplayName("빼기 테스트 2") @Test - void subTest(){ + void subFailTest(){ //given - int realValue = x - y; - int expectValue = 1; + int failValue = 0; + int testSub = calculator.addNumbers(); //when //then + assertNotEquals(testSub, failValue, "값이 일치합니다!"); } - @DisplayName("나누기 테스트") + @DisplayName("나누기 테스트 1") @Test void divideTest(){ //given - int realValue = x / y; int expectValue = 2; + int testDivide = calculator.divideNumbers(); //when //then + assertEquals(testDivide, expectValue, "값이 일치하지 않습니다."); + } + + @DisplayName("나누기 테스트 2") + @Test + void divideFailTest(){ + //given + int failValue = 0; + int testDivide = calculator.addNumbers(); + //when + //then + assertNotEquals(testDivide, failValue, "값이 일치합니다!"); } - @DisplayName("곱하기 테스트") + @DisplayName("곱하기 테스트 1") @Test void multipleTest(){ //given - int realValue = x * y; int expectValue = 2; + int testMultiple = calculator.multipleNumbers(); + //when + //then + assertEquals(testMultiple, expectValue, "값이 일치하지 않습니다."); + } + @DisplayName("곱하기 테스트 2") + @Test + void multipleFailTest(){ + //given + int failValue = 0; + int testMultiple = calculator.addNumbers(); //when //then + assertNotEquals(testMultiple, failValue, "값이 일치합니다!"); } } } From cf798409a20b488b0dfcbd4315106df8f3050026 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Sat, 11 May 2024 18:07:33 +0900 Subject: [PATCH 10/40] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=20=EC=A0=80=EC=9E=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/function/CalculatorTest.java | 46 ++++++++++++---------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/test/java/function/CalculatorTest.java b/src/test/java/function/CalculatorTest.java index f1b6303e..5c55061e 100644 --- a/src/test/java/function/CalculatorTest.java +++ b/src/test/java/function/CalculatorTest.java @@ -3,30 +3,36 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import view.CalculatorView; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; public class CalculatorTest { -// @Nested -// @DisplayName("입력관련 테스트") -// public class InputTest{ -// -// @DisplayName("입력내용 저장 테스트") -// @Test -// void inputTest(){ -// //given -// //when -// //then -// } -// -// @DisplayName("문자열 정수 변환 테스트") -// @Test -// void typeTest(){ -// //given -// //when -// //then -// } -// } + @Nested + @DisplayName("입력관련 테스트") + public class InputTest { + + @DisplayName("입력내용 저장 테스트") + @Test + void inputTest() { + //given + InputStream input = System.in; + ByteArrayInputStream in = new ByteArrayInputStream("2,1".getBytes()); + System.setIn(in); + List testList = CalculatorView.getNumber(); + int num1 = testList.get(0); + int num2 = testList.get(1); + //when + //Then + assertEquals(2, num1, "값이 일치하지 않습니다."); + assertEquals(1, num2, "값이 일치하지 않습니다."); + assertNotEquals(1, num1, "값이 일치합니다!"); + assertNotEquals(2, num2, "값이 일치합니다!"); + } + } @Nested @DisplayName("계산기능 테스트") From ec61541b85f08b0d94eaf2be4624cd456abd4ace Mon Sep 17 00:00:00 2001 From: mlngwan Date: Sat, 11 May 2024 18:08:04 +0900 Subject: [PATCH 11/40] =?UTF-8?q?refactor:=20Test=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20CalculatorView=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/CalculatorView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/view/CalculatorView.java b/src/main/java/view/CalculatorView.java index 8ea6102b..ff8d3728 100644 --- a/src/main/java/view/CalculatorView.java +++ b/src/main/java/view/CalculatorView.java @@ -7,7 +7,7 @@ public class CalculatorView { public static List getNumber(){ Scanner input = new Scanner(System.in); System.out.println("두 정수를 입력하세요. (입력 순서대로 계산, 쉼표(,)로 구분)"); - String userInput = input.next(); + String userInput = input.nextLine(); String[] inputNumberList = userInput.split(","); List numbers = new ArrayList<>(); for (String intList : inputNumberList){ From b8751fce1ceb3c83d384e4c9b7d6a8fee4439404 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Sat, 11 May 2024 18:41:08 +0900 Subject: [PATCH 12/40] =?UTF-8?q?docs:=20step3=20=EC=A7=84=ED=96=89?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EB=AC=B8=EC=84=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/README.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/README.md b/src/main/java/README.md index 91806191..7617d849 100644 --- a/src/main/java/README.md +++ b/src/main/java/README.md @@ -1,4 +1,4 @@ -## Step1 +## Step1 & Step2 (초간단 계산기 구현 및 테스트) ### 기능 요구사항 인자 2개를 받아 사칙연산을 할 수 있는 계산기를 구현한다. 사칙연산과 매칭되는 4개의 메서드를 제공한다. @@ -16,3 +16,30 @@ - JUnit 공부하기 - JUnit 활용하기 - 단위 테스트 구현하기 + +## Step 3 (문자열 계산기) +### 기능 요구사항 +- 기본적으로 쉼표(,)나 콜론(:)을 구분자로 가지는 경우 + - 기본 구분자로 분리한 각 숫자 합을 반환 + - (예: "" => 0, "1,2" => 3, "1,2:3" => 6) +- 커스텀 구분자 지정 가능, "//"와 "\n" 사이에 위치하는 문자를 사용하는 경우 + -커스텀 구분자로 분리해서 각 숫자 합을 반환 + - (예: "//;\n1;2;3" => 구분자:";", 결과로 6 반환) +- 문자열 계산기에 숫자 이외의 값 전달 경우 RuntimeException 예외 throw +- 문자열 계산기에 음수를 전달하는 경우 RuntimeException 예외 throw + +### 새로운 프로그래밍 요구사항 +- 구현한 문자열 계산기가 예상한대로 작동하는지 JUnit5 활용하여 테스트 자동화 +- 조금 더 복잡한 도메인 대상으로 테스트 작성 경험 + +### 기존 프로그래밍 요구사항 +- 메인 메서드 작성하지 않기 + +### ToDo +- 문자열 계산기 구현하기 + - MVC 구조로 작성하기 +- JUnit5 기반 테스트 작성하기 + - 필요기능? +- AssertJ 기반 테스트 작성하기 + - AssertJ 관련 학습하기 + - AssertJ로 구현하기 \ No newline at end of file From ae57faf333befdb3f3e03371c5fe2fde509c6707 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Sat, 11 May 2024 20:11:10 +0900 Subject: [PATCH 13/40] =?UTF-8?q?Rename:=20step3=20=EC=A7=84=ED=96=89?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EB=AC=B8=EC=84=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CalculatorController.java | 6 +++--- src/main/java/{ => simpleCalculator}/model/Calculator.java | 2 +- .../java/{ => simpleCalculator}/view/CalculatorView.java | 2 +- src/test/java/{function => calculator}/CalculatorTest.java | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) rename src/main/java/{ => simpleCalculator}/controller/CalculatorController.java (86%) rename src/main/java/{ => simpleCalculator}/model/Calculator.java (93%) rename src/main/java/{ => simpleCalculator}/view/CalculatorView.java (95%) rename src/test/java/{function => calculator}/CalculatorTest.java (97%) diff --git a/src/main/java/controller/CalculatorController.java b/src/main/java/simpleCalculator/controller/CalculatorController.java similarity index 86% rename from src/main/java/controller/CalculatorController.java rename to src/main/java/simpleCalculator/controller/CalculatorController.java index 1e0e0350..a29d0d80 100644 --- a/src/main/java/controller/CalculatorController.java +++ b/src/main/java/simpleCalculator/controller/CalculatorController.java @@ -1,6 +1,6 @@ -package controller; -import model.Calculator; -import view.CalculatorView; +package simpleCalculator.controller; +import simpleCalculator.model.Calculator; +import simpleCalculator.view.CalculatorView; import java.util.List; public class CalculatorController { diff --git a/src/main/java/model/Calculator.java b/src/main/java/simpleCalculator/model/Calculator.java similarity index 93% rename from src/main/java/model/Calculator.java rename to src/main/java/simpleCalculator/model/Calculator.java index eaa57cc0..f167df5d 100644 --- a/src/main/java/model/Calculator.java +++ b/src/main/java/simpleCalculator/model/Calculator.java @@ -1,4 +1,4 @@ -package model; +package simpleCalculator.model; public class Calculator { private final int num1; private final int num2; diff --git a/src/main/java/view/CalculatorView.java b/src/main/java/simpleCalculator/view/CalculatorView.java similarity index 95% rename from src/main/java/view/CalculatorView.java rename to src/main/java/simpleCalculator/view/CalculatorView.java index ff8d3728..d0ce2464 100644 --- a/src/main/java/view/CalculatorView.java +++ b/src/main/java/simpleCalculator/view/CalculatorView.java @@ -1,4 +1,4 @@ -package view; +package simpleCalculator.view; import java.util.ArrayList; import java.util.List; import java.util.Scanner; diff --git a/src/test/java/function/CalculatorTest.java b/src/test/java/calculator/CalculatorTest.java similarity index 97% rename from src/test/java/function/CalculatorTest.java rename to src/test/java/calculator/CalculatorTest.java index 5c55061e..710b09c0 100644 --- a/src/test/java/function/CalculatorTest.java +++ b/src/test/java/calculator/CalculatorTest.java @@ -1,9 +1,9 @@ -package function; -import model.Calculator; +package calculator; +import simpleCalculator.model.Calculator; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import view.CalculatorView; +import simpleCalculator.view.CalculatorView; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.List; From 6b1fde1b13cb5e13eb12bd6112ce1c557d2a2091 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Sat, 11 May 2024 20:11:42 +0900 Subject: [PATCH 14/40] =?UTF-8?q?Feat:=20StringCalculator=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/StringCalculator.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/main/java/stringCalcculator/model/StringCalculator.java diff --git a/src/main/java/stringCalcculator/model/StringCalculator.java b/src/main/java/stringCalcculator/model/StringCalculator.java new file mode 100644 index 00000000..50fb610b --- /dev/null +++ b/src/main/java/stringCalcculator/model/StringCalculator.java @@ -0,0 +1,51 @@ +package stringCalcculator.model; + +public class StringCalculator { + public boolean checkBlank(String input){ + return input == null || input.isEmpty(); + } + + public String[] splitInput(String input){ + if (input.startsWith("//")) { + return splitByCustom(input); + } + return input.split(",|:"); + } + + public String[] splitByCustom(String input){ + String[] separates = input.split("\n", 2); + String custom = separates[0].substring(2); + return separates[1].split(custom); + } + + public int[] listToInt(String[] inputList){ + int[] numberList = new int[inputList.length]; + for (int i = 0; i < inputList.length; i++){ + numberList[i] = convertToInt(inputList[i]); + } + return numberList; + } + + public int convertToInt(String input){ + int number = Integer.parseInt(input); + if (number < 0) { + throw new RuntimeException("음수는 입력할 수 없습니다."); + } + return number; + } + + public int sum(int[] inputList){ + int total = 0; + for(int number : inputList){ + total += number; + } + return total; + } + + public int add(String input){ + if(checkBlank(input)){ + return 0; + } + return sum(listToInt(splitInput(input))); + } +} From f7900c1653b8377fc7b9635600188614d32a6ca0 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Sat, 11 May 2024 20:39:21 +0900 Subject: [PATCH 15/40] =?UTF-8?q?Feat:=20StringCalculator=20DEFAULT=20?= =?UTF-8?q?=EA=B0=92=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EC=95=84=EB=8B=8C=20=EB=8B=A4=EB=A5=B8=20=ED=98=95?= =?UTF-8?q?=EC=8B=9D=EC=9D=98=20=EA=B2=BD=EC=9A=B0=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=EA=B0=92=20=EC=B6=9C=EB=A0=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/StringCalculator.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/stringCalcculator/model/StringCalculator.java b/src/main/java/stringCalcculator/model/StringCalculator.java index 50fb610b..3040c7a2 100644 --- a/src/main/java/stringCalcculator/model/StringCalculator.java +++ b/src/main/java/stringCalcculator/model/StringCalculator.java @@ -1,6 +1,8 @@ package stringCalcculator.model; public class StringCalculator { + + private static final String DEFAULTS = ",|:"; public boolean checkBlank(String input){ return input == null || input.isEmpty(); } @@ -9,7 +11,7 @@ public String[] splitInput(String input){ if (input.startsWith("//")) { return splitByCustom(input); } - return input.split(",|:"); + return input.split(DEFAULTS); } public String[] splitByCustom(String input){ @@ -19,11 +21,15 @@ public String[] splitByCustom(String input){ } public int[] listToInt(String[] inputList){ - int[] numberList = new int[inputList.length]; - for (int i = 0; i < inputList.length; i++){ - numberList[i] = convertToInt(inputList[i]); + try { + int[] numberList = new int[inputList.length]; + for (int i = 0; i < inputList.length; i++) { + numberList[i] = convertToInt(inputList[i]); + } + return numberList; + } catch (NumberFormatException e){ + throw new RuntimeException("숫자가 아닌 다른 형식이 포함되었습니다."); } - return numberList; } public int convertToInt(String input){ From b1398c618438ff303efc6824f1af45e74dd5e77c Mon Sep 17 00:00:00 2001 From: mlngwan Date: Sat, 11 May 2024 20:51:29 +0900 Subject: [PATCH 16/40] =?UTF-8?q?Test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=AA=85=20=EC=A7=81=EA=B4=80=EC=A0=81=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/CalculatorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/calculator/CalculatorTest.java b/src/test/java/calculator/CalculatorTest.java index 710b09c0..6c90a63c 100644 --- a/src/test/java/calculator/CalculatorTest.java +++ b/src/test/java/calculator/CalculatorTest.java @@ -17,7 +17,7 @@ public class InputTest { @DisplayName("입력내용 저장 테스트") @Test - void inputTest() { + void inputAndSaveTest() { //given InputStream input = System.in; ByteArrayInputStream in = new ByteArrayInputStream("2,1".getBytes()); From 31642a61d88df93524580aa8925a973ab8a0821f Mon Sep 17 00:00:00 2001 From: mlngwan Date: Sat, 11 May 2024 20:51:54 +0900 Subject: [PATCH 17/40] =?UTF-8?q?Test:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=EA=B8=B0=20Test=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StringCalculatorTest.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/test/java/stringCalculator/StringCalculatorTest.java diff --git a/src/test/java/stringCalculator/StringCalculatorTest.java b/src/test/java/stringCalculator/StringCalculatorTest.java new file mode 100644 index 00000000..13718e20 --- /dev/null +++ b/src/test/java/stringCalculator/StringCalculatorTest.java @@ -0,0 +1,53 @@ +package stringCalculator; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import simpleCalculator.model.Calculator; +import stringCalcculator.model.StringCalculator; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class StringCalculatorTest { + public static class stringTest { + @Test + @DisplayName("값이 없거나 비어있는 경우") + public void nullAndEmpty(){ + StringCalculator calculator = new StringCalculator(); + assertEquals(0, calculator.add(null)); + assertEquals(0, calculator.add("")); + } + + @Test + @DisplayName("기본 구분자를 사용하는 경우") + public void addWithDefault(){ + StringCalculator calculator = new StringCalculator(); + assertEquals(6, calculator.add("1,2,3")); + assertEquals(6, calculator.add("1,2:3")); + assertEquals(6, calculator.add("1:2,3")); + assertEquals(6, calculator.add("1:2:3")); + } + + @Test + @DisplayName("커스텀 구분자를 사용하는 경우") + public void addWithCustom(){ + StringCalculator calculator = new StringCalculator(); + assertEquals(6, calculator.add("//;\n1;2;3")); + } + + @Test + @DisplayName("숫자가 아닌 다른 값을 입력한 경우") + public void isNotNumber(){ + StringCalculator calculator = new StringCalculator(); + assertThrows(RuntimeException.class, () -> calculator.add("hi,1,2")); + assertThrows(RuntimeException.class, () -> calculator.add("hi")); + } + + @Test + @DisplayName("음수를 입력한 경우") + public void isNegative(){ + StringCalculator calculator = new StringCalculator(); + assertThrows(RuntimeException.class, () -> calculator.add("-2,1,2")); + assertThrows(RuntimeException.class, () -> calculator.add("-2")); + + } + } +} From 63e45f672f3a01362b61b682ee6da0c90942c366 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Sat, 11 May 2024 20:52:28 +0900 Subject: [PATCH 18/40] =?UTF-8?q?Test:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=EA=B8=B0=20Test=20=EC=93=B8=EB=AA=A8?= =?UTF-8?q?=EC=97=86=EB=8A=94=20Import=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/stringCalculator/StringCalculatorTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/stringCalculator/StringCalculatorTest.java b/src/test/java/stringCalculator/StringCalculatorTest.java index 13718e20..3d2ea410 100644 --- a/src/test/java/stringCalculator/StringCalculatorTest.java +++ b/src/test/java/stringCalculator/StringCalculatorTest.java @@ -1,7 +1,6 @@ package stringCalculator; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import simpleCalculator.model.Calculator; import stringCalcculator.model.StringCalculator; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; From d97a6c669652ff28692a243a736141c06a7c884e Mon Sep 17 00:00:00 2001 From: mlngwan <109716244+mlngwan@users.noreply.github.com> Date: Sat, 11 May 2024 22:39:11 +0900 Subject: [PATCH 19/40] =?UTF-8?q?Test:=20AssertJ=EB=A5=BC=20=ED=99=9C?= =?UTF-8?q?=EC=9A=A9=ED=95=9C=20Test=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SCTestAssertJ.java | 85 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 SCTestAssertJ.java diff --git a/SCTestAssertJ.java b/SCTestAssertJ.java new file mode 100644 index 00000000..a3973879 --- /dev/null +++ b/SCTestAssertJ.java @@ -0,0 +1,85 @@ +package stringCalculator; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import stringCalcculator.model.StringCalculator; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; + +public class SCTestAssertJ { + @Nested + class newTest{ + @Test + @DisplayName("값이 없거나 빈 경우") + public void nullAndEmpty(){ + StringCalculator calculator = new StringCalculator(); + assertThat(0).isEqualTo(calculator.add(null)); + assertThat(0).isEqualTo(calculator.add("")); + } + + @Test + @DisplayName("기본 구분자를 사용하는 경우") + public void addWithDefault(){ + StringCalculator calculator = new StringCalculator(); + assertThat(6).isEqualTo(calculator.add("1,2,3")); + assertThat(6).isEqualTo(calculator.add("1,2:3")); + assertThat(6).isEqualTo(calculator.add("1:2,3")); + assertThat(6).isEqualTo(calculator.add("1:2:3")); + } + + @Test + @DisplayName("커스텀 구분자를 사용하는 경우") + public void addWithCustom(){ + StringCalculator calculator = new StringCalculator(); + assertThat(6).isEqualTo(calculator.add("//;\n1;2;3")); + } + + @DisplayName("숫자가 아닌 다른 값을 입력한 경우") + @Nested + public class isNotNumber{ + + @Test + @DisplayName("예외처리 확인") + public void onlyException(){ + StringCalculator calculator = new StringCalculator(); + assertThatThrownBy(() -> { + calculator.add("hi,1,2"); + }).isInstanceOf(RuntimeException.class); + } + + @Test + @DisplayName("예외처리와 예외메세지 확인") + public void messageWithException(){ + StringCalculator calculator = new StringCalculator(); + assertThatThrownBy(() -> { + calculator.add("hi,1,2"); + }).isInstanceOf(RuntimeException.class) + .hasMessage("숫자가 아닌 다른 형식이 포함되었습니다."); + } + } + + @DisplayName("음수를 입력한 경우") + @Nested + public class isNegative{ + + @Test + @DisplayName("예외처리 확인") + public void onlyException(){ + StringCalculator calculator = new StringCalculator(); + assertThatThrownBy(() -> { + calculator.add("-1,1,2"); + }).isInstanceOf(RuntimeException.class); + } + + @Test + @DisplayName("예외처리와 예외메세지 확인") + public void messageWithException(){ + StringCalculator calculator = new StringCalculator(); + assertThatThrownBy(() -> { + calculator.add("-1,1,2"); + }).isInstanceOf(RuntimeException.class) + .hasMessage("음수는 입력할 수 없습니다."); + } + } + } +} From cfe56c3e2e761b165b72b30cd6842beb4b62588a Mon Sep 17 00:00:00 2001 From: mlngwan Date: Mon, 13 May 2024 11:25:28 +0900 Subject: [PATCH 20/40] =?UTF-8?q?Refactor:=20AssertJ=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=9C=20dependencies=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index 87254a3a..4cc70fd9 100644 --- a/build.gradle +++ b/build.gradle @@ -12,8 +12,10 @@ repositories { dependencies { testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation('org.junit.jupiter:junit-jupiter') + testImplementation("org.assertj:assertj-core:3.20.2") } test { useJUnitPlatform() } + From eb5a102794e1c8e6255245dfe13f55632e7800ad Mon Sep 17 00:00:00 2001 From: mlngwan Date: Mon, 13 May 2024 11:26:43 +0900 Subject: [PATCH 21/40] =?UTF-8?q?Rename:=20Test=20Code=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StringCalculatorTestAssertJ.java | 180 +++++++++--------- ...t.java => StringCalculatorTestJUnit5.java} | 23 ++- 2 files changed, 110 insertions(+), 93 deletions(-) rename SCTestAssertJ.java => src/test/java/stringCalculator/StringCalculatorTestAssertJ.java (83%) rename src/test/java/stringCalculator/{StringCalculatorTest.java => StringCalculatorTestJUnit5.java} (83%) diff --git a/SCTestAssertJ.java b/src/test/java/stringCalculator/StringCalculatorTestAssertJ.java similarity index 83% rename from SCTestAssertJ.java rename to src/test/java/stringCalculator/StringCalculatorTestAssertJ.java index a3973879..bd7d9fe1 100644 --- a/SCTestAssertJ.java +++ b/src/test/java/stringCalculator/StringCalculatorTestAssertJ.java @@ -1,85 +1,95 @@ -package stringCalculator; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import stringCalcculator.model.StringCalculator; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; - -public class SCTestAssertJ { - @Nested - class newTest{ - @Test - @DisplayName("값이 없거나 빈 경우") - public void nullAndEmpty(){ - StringCalculator calculator = new StringCalculator(); - assertThat(0).isEqualTo(calculator.add(null)); - assertThat(0).isEqualTo(calculator.add("")); - } - - @Test - @DisplayName("기본 구분자를 사용하는 경우") - public void addWithDefault(){ - StringCalculator calculator = new StringCalculator(); - assertThat(6).isEqualTo(calculator.add("1,2,3")); - assertThat(6).isEqualTo(calculator.add("1,2:3")); - assertThat(6).isEqualTo(calculator.add("1:2,3")); - assertThat(6).isEqualTo(calculator.add("1:2:3")); - } - - @Test - @DisplayName("커스텀 구분자를 사용하는 경우") - public void addWithCustom(){ - StringCalculator calculator = new StringCalculator(); - assertThat(6).isEqualTo(calculator.add("//;\n1;2;3")); - } - - @DisplayName("숫자가 아닌 다른 값을 입력한 경우") - @Nested - public class isNotNumber{ - - @Test - @DisplayName("예외처리 확인") - public void onlyException(){ - StringCalculator calculator = new StringCalculator(); - assertThatThrownBy(() -> { - calculator.add("hi,1,2"); - }).isInstanceOf(RuntimeException.class); - } - - @Test - @DisplayName("예외처리와 예외메세지 확인") - public void messageWithException(){ - StringCalculator calculator = new StringCalculator(); - assertThatThrownBy(() -> { - calculator.add("hi,1,2"); - }).isInstanceOf(RuntimeException.class) - .hasMessage("숫자가 아닌 다른 형식이 포함되었습니다."); - } - } - - @DisplayName("음수를 입력한 경우") - @Nested - public class isNegative{ - - @Test - @DisplayName("예외처리 확인") - public void onlyException(){ - StringCalculator calculator = new StringCalculator(); - assertThatThrownBy(() -> { - calculator.add("-1,1,2"); - }).isInstanceOf(RuntimeException.class); - } - - @Test - @DisplayName("예외처리와 예외메세지 확인") - public void messageWithException(){ - StringCalculator calculator = new StringCalculator(); - assertThatThrownBy(() -> { - calculator.add("-1,1,2"); - }).isInstanceOf(RuntimeException.class) - .hasMessage("음수는 입력할 수 없습니다."); - } - } - } -} +package stringCalculator; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import simpleCalculator.model.StringCalculator; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; + +public class StringCalculatorTestAssertJ { + + @Nested + class newTest { + + @Test + @DisplayName("값이 없거나 빈 경우") + public void nullAndEmpty() { + + StringCalculator calculator = new StringCalculator(); + assertThat(0).isEqualTo(calculator.add(null)); + assertThat(0).isEqualTo(calculator.add("")); + } + + @Test + @DisplayName("기본 구분자를 사용하는 경우") + public void addWithDefault() { + + StringCalculator calculator = new StringCalculator(); + assertThat(6).isEqualTo(calculator.add("1,2,3")); + assertThat(6).isEqualTo(calculator.add("1,2:3")); + assertThat(6).isEqualTo(calculator.add("1:2,3")); + assertThat(6).isEqualTo(calculator.add("1:2:3")); + } + + @Test + @DisplayName("커스텀 구분자를 사용하는 경우") + public void addWithCustom() { + + StringCalculator calculator = new StringCalculator(); + assertThat(6).isEqualTo(calculator.add("//;\n1;2;3")); + } + + @DisplayName("숫자가 아닌 다른 값을 입력한 경우") + @Nested + public class isNotNumber { + + @Test + @DisplayName("예외처리 확인") + public void onlyException() { + + StringCalculator calculator = new StringCalculator(); + assertThatThrownBy(() -> { + calculator.add("hi,1,2"); + }).isInstanceOf(RuntimeException.class); + } + + @Test + @DisplayName("예외처리와 예외메세지 확인") + public void messageWithException() { + + StringCalculator calculator = new StringCalculator(); + assertThatThrownBy(() -> { + calculator.add("hi,1,2"); + }).isInstanceOf(RuntimeException.class) + .hasMessage("숫자가 아닌 다른 형식이 포함되었습니다."); + } + } + + @DisplayName("음수를 입력한 경우") + @Nested + public class isNegative { + + @Test + @DisplayName("예외처리 확인") + public void onlyException() { + + StringCalculator calculator = new StringCalculator(); + assertThatThrownBy(() -> { + calculator.add("-1,1,2"); + }).isInstanceOf(RuntimeException.class); + } + + @Test + @DisplayName("예외처리와 예외메세지 확인") + public void messageWithException() { + + StringCalculator calculator = new StringCalculator(); + assertThatThrownBy(() -> { + calculator.add("-1,1,2"); + }).isInstanceOf(RuntimeException.class) + .hasMessage("음수는 입력할 수 없습니다."); + } + } + } +} diff --git a/src/test/java/stringCalculator/StringCalculatorTest.java b/src/test/java/stringCalculator/StringCalculatorTestJUnit5.java similarity index 83% rename from src/test/java/stringCalculator/StringCalculatorTest.java rename to src/test/java/stringCalculator/StringCalculatorTestJUnit5.java index 3d2ea410..e584a84e 100644 --- a/src/test/java/stringCalculator/StringCalculatorTest.java +++ b/src/test/java/stringCalculator/StringCalculatorTestJUnit5.java @@ -1,15 +1,19 @@ package stringCalculator; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import stringCalcculator.model.StringCalculator; +import simpleCalculator.model.StringCalculator; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -public class StringCalculatorTest { +public class StringCalculatorTestJUnit5 { + public static class stringTest { + @Test @DisplayName("값이 없거나 비어있는 경우") - public void nullAndEmpty(){ + public void nullAndEmpty() { + StringCalculator calculator = new StringCalculator(); assertEquals(0, calculator.add(null)); assertEquals(0, calculator.add("")); @@ -17,7 +21,8 @@ public void nullAndEmpty(){ @Test @DisplayName("기본 구분자를 사용하는 경우") - public void addWithDefault(){ + public void addWithDefault() { + StringCalculator calculator = new StringCalculator(); assertEquals(6, calculator.add("1,2,3")); assertEquals(6, calculator.add("1,2:3")); @@ -27,14 +32,16 @@ public void addWithDefault(){ @Test @DisplayName("커스텀 구분자를 사용하는 경우") - public void addWithCustom(){ + public void addWithCustom() { + StringCalculator calculator = new StringCalculator(); assertEquals(6, calculator.add("//;\n1;2;3")); } @Test @DisplayName("숫자가 아닌 다른 값을 입력한 경우") - public void isNotNumber(){ + public void isNotNumber() { + StringCalculator calculator = new StringCalculator(); assertThrows(RuntimeException.class, () -> calculator.add("hi,1,2")); assertThrows(RuntimeException.class, () -> calculator.add("hi")); @@ -42,11 +49,11 @@ public void isNotNumber(){ @Test @DisplayName("음수를 입력한 경우") - public void isNegative(){ + public void isNegative() { + StringCalculator calculator = new StringCalculator(); assertThrows(RuntimeException.class, () -> calculator.add("-2,1,2")); assertThrows(RuntimeException.class, () -> calculator.add("-2")); - } } } From fc96402046b75a809c897d627737934a49bcceb6 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Mon, 13 May 2024 11:27:56 +0900 Subject: [PATCH 22/40] =?UTF-8?q?Docs:=20step4=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=EB=AC=B8=EC=84=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/README.md b/src/main/java/README.md index 7617d849..80645806 100644 --- a/src/main/java/README.md +++ b/src/main/java/README.md @@ -42,4 +42,24 @@ - 필요기능? - AssertJ 기반 테스트 작성하기 - AssertJ 관련 학습하기 - - AssertJ로 구현하기 \ No newline at end of file + - AssertJ로 구현하기 + +## Step4 리팩토링 +### 코드 작성 시 주의할 점 +- 클래스 첫 줄에는 개행 넣기 -> 코드 컨벤션 (개행 알아보기) +- 코드에 EOF 발생 -> 무엇인지, 처리법 +- 코드 내부에 사용하는 메서드의 접근 제어자 설정 +- 상수 처리 및 네이밍 +- 메서드 명은 동사로 시작하기 +- static 사용이유 +- test code 네이밍 알아보기 +- test code given-when-then 알아보기 + +### 초간단 계산기 +- 사용자의 입력에 따라서 해당 연산 실행하게 바꾸기 +- 음수일 때 예외 추가 +- 나누는 수가 0일때 예외 처리 +- view에 로직을 처리하지 않게 하기 -> model에서 처리하기 + +### 문자열 계산기 +- sum 메서드 처리 \ No newline at end of file From c1757998184eecf30ba02640fb4f858d0d709ba5 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Mon, 13 May 2024 11:29:51 +0900 Subject: [PATCH 23/40] =?UTF-8?q?Refactor:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=BB=A8=EB=B2=A4=EC=85=98=20-=20=EA=B0=9C=ED=96=89=20?= =?UTF-8?q?=EB=B0=8F=20=EC=A0=95=EB=A0=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CalculatorController.java | 12 ++++++-- .../simpleCalculator/model/Calculator.java | 19 ++++++++---- .../model/StringCalculator.java | 30 ++++++++++++------- .../simpleCalculator/view/CalculatorView.java | 7 +++-- src/test/java/calculator/CalculatorTest.java | 20 ++++++++----- 5 files changed, 58 insertions(+), 30 deletions(-) rename src/main/java/{stringCalcculator => simpleCalculator}/model/StringCalculator.java (71%) diff --git a/src/main/java/simpleCalculator/controller/CalculatorController.java b/src/main/java/simpleCalculator/controller/CalculatorController.java index a29d0d80..9a5deba3 100644 --- a/src/main/java/simpleCalculator/controller/CalculatorController.java +++ b/src/main/java/simpleCalculator/controller/CalculatorController.java @@ -1,28 +1,34 @@ package simpleCalculator.controller; + import simpleCalculator.model.Calculator; import simpleCalculator.view.CalculatorView; import java.util.List; public class CalculatorController { + List numbers = CalculatorView.getNumber(); Calculator calculator = new Calculator(numbers.get(0), numbers.get(1)); public void doAdd() { + int addResult = calculator.addNumbers(); System.out.println("덧셈 결과 : " + addResult); } - public void doSub(){ + public void doSub() { + int subResult = calculator.subNumbers(); System.out.println("뺄셈 결과 : " + subResult); } - public void doDivide(){ + public void doDivide() { + int divideResult = calculator.divideNumbers(); System.out.println("나눗셈 결과 : " + divideResult); } - public void doMultiple(){ + public void doMultiple() { + int multipleResult = calculator.multipleNumbers(); System.out.println("곱셈 결과 : " + multipleResult); } diff --git a/src/main/java/simpleCalculator/model/Calculator.java b/src/main/java/simpleCalculator/model/Calculator.java index f167df5d..25c0387b 100644 --- a/src/main/java/simpleCalculator/model/Calculator.java +++ b/src/main/java/simpleCalculator/model/Calculator.java @@ -1,26 +1,33 @@ package simpleCalculator.model; + public class Calculator { + private final int num1; private final int num2; - public Calculator(int num1, int num2){ + public Calculator(int num1, int num2) { + this.num1 = num1; this.num2 = num2; } - public int addNumbers(){ + public int addNumbers() { + return num1 + num2; } - public int subNumbers(){ + public int subNumbers() { + return num1 - num2; } - public int divideNumbers(){ - return num1/num2; + public int divideNumbers() { + + return num1 / num2; } - public int multipleNumbers(){ + public int multipleNumbers() { + return num1 * num2; } } \ No newline at end of file diff --git a/src/main/java/stringCalcculator/model/StringCalculator.java b/src/main/java/simpleCalculator/model/StringCalculator.java similarity index 71% rename from src/main/java/stringCalcculator/model/StringCalculator.java rename to src/main/java/simpleCalculator/model/StringCalculator.java index 3040c7a2..3d750ebf 100644 --- a/src/main/java/stringCalcculator/model/StringCalculator.java +++ b/src/main/java/simpleCalculator/model/StringCalculator.java @@ -1,38 +1,44 @@ -package stringCalcculator.model; +package simpleCalculator.model; public class StringCalculator { private static final String DEFAULTS = ",|:"; - public boolean checkBlank(String input){ + + public boolean checkBlank(String input) { + return input == null || input.isEmpty(); } - public String[] splitInput(String input){ + public String[] splitInput(String input) { + if (input.startsWith("//")) { return splitByCustom(input); } return input.split(DEFAULTS); } - public String[] splitByCustom(String input){ + public String[] splitByCustom(String input) { + String[] separates = input.split("\n", 2); String custom = separates[0].substring(2); return separates[1].split(custom); } - public int[] listToInt(String[] inputList){ + public int[] listToInt(String[] inputList) { + try { int[] numberList = new int[inputList.length]; for (int i = 0; i < inputList.length; i++) { numberList[i] = convertToInt(inputList[i]); } return numberList; - } catch (NumberFormatException e){ + } catch (NumberFormatException e) { throw new RuntimeException("숫자가 아닌 다른 형식이 포함되었습니다."); } } - public int convertToInt(String input){ + public int convertToInt(String input) { + int number = Integer.parseInt(input); if (number < 0) { throw new RuntimeException("음수는 입력할 수 없습니다."); @@ -40,16 +46,18 @@ public int convertToInt(String input){ return number; } - public int sum(int[] inputList){ + public int sum(int[] inputList) { + int total = 0; - for(int number : inputList){ + for (int number : inputList) { total += number; } return total; } - public int add(String input){ - if(checkBlank(input)){ + public int add(String input) { + + if (checkBlank(input)) { return 0; } return sum(listToInt(splitInput(input))); diff --git a/src/main/java/simpleCalculator/view/CalculatorView.java b/src/main/java/simpleCalculator/view/CalculatorView.java index d0ce2464..1602890c 100644 --- a/src/main/java/simpleCalculator/view/CalculatorView.java +++ b/src/main/java/simpleCalculator/view/CalculatorView.java @@ -1,16 +1,19 @@ package simpleCalculator.view; + import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class CalculatorView { - public static List getNumber(){ + + public static List getNumber() { + Scanner input = new Scanner(System.in); System.out.println("두 정수를 입력하세요. (입력 순서대로 계산, 쉼표(,)로 구분)"); String userInput = input.nextLine(); String[] inputNumberList = userInput.split(","); List numbers = new ArrayList<>(); - for (String intList : inputNumberList){ + for (String intList : inputNumberList) { numbers.add(Integer.parseInt(intList)); } return numbers; diff --git a/src/test/java/calculator/CalculatorTest.java b/src/test/java/calculator/CalculatorTest.java index 6c90a63c..881ebbe7 100644 --- a/src/test/java/calculator/CalculatorTest.java +++ b/src/test/java/calculator/CalculatorTest.java @@ -1,4 +1,5 @@ package calculator; + import simpleCalculator.model.Calculator; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -37,12 +38,15 @@ void inputAndSaveTest() { @Nested @DisplayName("계산기능 테스트") public class functionTest { + int testNum1 = 2; int testNum2 = 1; + Calculator calculator = new Calculator(testNum1, testNum2); + @DisplayName("더하기 테스트 1") @Test - void addTest(){ + void addTest() { //given int expectValue = 3; int testAdd = calculator.addNumbers(); @@ -53,7 +57,7 @@ void addTest(){ @DisplayName("더하기 테스트 2") @Test - void addFailTest(){ + void addFailTest() { //given int failValue = 0; int testAdd = calculator.addNumbers(); @@ -64,7 +68,7 @@ void addFailTest(){ @DisplayName("빼기 테스트 1") @Test - void subTest(){ + void subTest() { //given int expectValue = 1; int testSub = calculator.subNumbers(); @@ -75,7 +79,7 @@ void subTest(){ @DisplayName("빼기 테스트 2") @Test - void subFailTest(){ + void subFailTest() { //given int failValue = 0; int testSub = calculator.addNumbers(); @@ -86,7 +90,7 @@ void subFailTest(){ @DisplayName("나누기 테스트 1") @Test - void divideTest(){ + void divideTest() { //given int expectValue = 2; int testDivide = calculator.divideNumbers(); @@ -98,7 +102,7 @@ void divideTest(){ @DisplayName("나누기 테스트 2") @Test - void divideFailTest(){ + void divideFailTest() { //given int failValue = 0; int testDivide = calculator.addNumbers(); @@ -109,7 +113,7 @@ void divideFailTest(){ @DisplayName("곱하기 테스트 1") @Test - void multipleTest(){ + void multipleTest() { //given int expectValue = 2; int testMultiple = calculator.multipleNumbers(); @@ -120,7 +124,7 @@ void multipleTest(){ @DisplayName("곱하기 테스트 2") @Test - void multipleFailTest(){ + void multipleFailTest() { //given int failValue = 0; int testMultiple = calculator.addNumbers(); From cab781bd94954c031c59874cd6aa36176ee4bde1 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Mon, 13 May 2024 14:16:22 +0900 Subject: [PATCH 24/40] =?UTF-8?q?Refactor:=20Test=20Code=20=EB=84=A4?= =?UTF-8?q?=EC=9D=B4=EB=B0=8D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/CalculatorTest.java | 25 +++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/test/java/calculator/CalculatorTest.java b/src/test/java/calculator/CalculatorTest.java index 881ebbe7..a8adc38b 100644 --- a/src/test/java/calculator/CalculatorTest.java +++ b/src/test/java/calculator/CalculatorTest.java @@ -19,6 +19,7 @@ public class InputTest { @DisplayName("입력내용 저장 테스트") @Test void inputAndSaveTest() { + //given InputStream input = System.in; ByteArrayInputStream in = new ByteArrayInputStream("2,1".getBytes()); @@ -44,9 +45,10 @@ public class functionTest { Calculator calculator = new Calculator(testNum1, testNum2); - @DisplayName("더하기 테스트 1") + @DisplayName("더하기 테스트 : 예측값과 입력값이 같은 경우") @Test void addTest() { + //given int expectValue = 3; int testAdd = calculator.addNumbers(); @@ -55,9 +57,10 @@ void addTest() { assertEquals(testAdd, expectValue, "값이 일치하지 않습니다."); } - @DisplayName("더하기 테스트 2") + @DisplayName("더하기 테스트 : 예측값과 입력값이 다른 경우") @Test void addFailTest() { + //given int failValue = 0; int testAdd = calculator.addNumbers(); @@ -66,9 +69,10 @@ void addFailTest() { assertNotEquals(testAdd, failValue, "값이 일치합니다!"); } - @DisplayName("빼기 테스트 1") + @DisplayName("빼기 테스트 : 예측값과 입력값이 같은 경우") @Test void subTest() { + //given int expectValue = 1; int testSub = calculator.subNumbers(); @@ -77,9 +81,10 @@ void subTest() { assertEquals(testSub, expectValue, "값이 일치하지 않습니다."); } - @DisplayName("빼기 테스트 2") + @DisplayName("빼기 테스트 : 예측값과 입력값이 다른 경우") @Test void subFailTest() { + //given int failValue = 0; int testSub = calculator.addNumbers(); @@ -88,9 +93,10 @@ void subFailTest() { assertNotEquals(testSub, failValue, "값이 일치합니다!"); } - @DisplayName("나누기 테스트 1") + @DisplayName("나누기 테스트 : 예측값과 입력값이 같은 경우") @Test void divideTest() { + //given int expectValue = 2; int testDivide = calculator.divideNumbers(); @@ -100,9 +106,10 @@ void divideTest() { assertEquals(testDivide, expectValue, "값이 일치하지 않습니다."); } - @DisplayName("나누기 테스트 2") + @DisplayName("나누기 테스트 : 예측값과 입력값이 다른 경우") @Test void divideFailTest() { + //given int failValue = 0; int testDivide = calculator.addNumbers(); @@ -111,9 +118,10 @@ void divideFailTest() { assertNotEquals(testDivide, failValue, "값이 일치합니다!"); } - @DisplayName("곱하기 테스트 1") + @DisplayName("곱하기 테스트 : 예측값과 입력값이 같은 경우") @Test void multipleTest() { + //given int expectValue = 2; int testMultiple = calculator.multipleNumbers(); @@ -122,9 +130,10 @@ void multipleTest() { assertEquals(testMultiple, expectValue, "값이 일치하지 않습니다."); } - @DisplayName("곱하기 테스트 2") + @DisplayName("곱하기 테스트 : 예측값과 입력값이 다른 경우") @Test void multipleFailTest() { + //given int failValue = 0; int testMultiple = calculator.addNumbers(); From 127590a915bbc7fc4d9872530d62c2cf7ea0f5cb Mon Sep 17 00:00:00 2001 From: mlngwan Date: Tue, 14 May 2024 23:26:38 +0900 Subject: [PATCH 25/40] =?UTF-8?q?Refactor:=20=EC=83=81=EC=88=98=EA=B0=92?= =?UTF-8?q?=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EC=9E=AC=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EC=83=88=EB=A1=9C=EC=9A=B4=20=EC=83=81=EC=88=98?= =?UTF-8?q?=EA=B0=92=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../simpleCalculator/model/StringCalculator.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/simpleCalculator/model/StringCalculator.java b/src/main/java/simpleCalculator/model/StringCalculator.java index 3d750ebf..79acf562 100644 --- a/src/main/java/simpleCalculator/model/StringCalculator.java +++ b/src/main/java/simpleCalculator/model/StringCalculator.java @@ -2,7 +2,8 @@ public class StringCalculator { - private static final String DEFAULTS = ",|:"; + private static final String SEPARATOR_DEFAULTS = ",|:"; + private static final int ZERO = 0; public boolean checkBlank(String input) { @@ -14,13 +15,13 @@ public String[] splitInput(String input) { if (input.startsWith("//")) { return splitByCustom(input); } - return input.split(DEFAULTS); + return input.split(SEPARATOR_DEFAULTS); } public String[] splitByCustom(String input) { String[] separates = input.split("\n", 2); - String custom = separates[0].substring(2); + String custom = separates[ZERO].substring(2); return separates[1].split(custom); } @@ -28,7 +29,7 @@ public int[] listToInt(String[] inputList) { try { int[] numberList = new int[inputList.length]; - for (int i = 0; i < inputList.length; i++) { + for (int i = ZERO; i < inputList.length; i++) { numberList[i] = convertToInt(inputList[i]); } return numberList; @@ -40,7 +41,7 @@ public int[] listToInt(String[] inputList) { public int convertToInt(String input) { int number = Integer.parseInt(input); - if (number < 0) { + if (number < ZERO) { throw new RuntimeException("음수는 입력할 수 없습니다."); } return number; @@ -48,7 +49,7 @@ public int convertToInt(String input) { public int sum(int[] inputList) { - int total = 0; + int total = ZERO; for (int number : inputList) { total += number; } @@ -58,7 +59,7 @@ public int sum(int[] inputList) { public int add(String input) { if (checkBlank(input)) { - return 0; + return ZERO; } return sum(listToInt(splitInput(input))); } From a2f073b11c548d8fe3b5d2955b53caa5446cc41d Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 00:19:19 +0900 Subject: [PATCH 26/40] =?UTF-8?q?Remove:=20InputView=EC=99=80=20OutputView?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../simpleCalculator/view/CalculatorView.java | 21 ------------------- 1 file changed, 21 deletions(-) delete mode 100644 src/main/java/simpleCalculator/view/CalculatorView.java diff --git a/src/main/java/simpleCalculator/view/CalculatorView.java b/src/main/java/simpleCalculator/view/CalculatorView.java deleted file mode 100644 index 1602890c..00000000 --- a/src/main/java/simpleCalculator/view/CalculatorView.java +++ /dev/null @@ -1,21 +0,0 @@ -package simpleCalculator.view; - -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; - -public class CalculatorView { - - public static List getNumber() { - - Scanner input = new Scanner(System.in); - System.out.println("두 정수를 입력하세요. (입력 순서대로 계산, 쉼표(,)로 구분)"); - String userInput = input.nextLine(); - String[] inputNumberList = userInput.split(","); - List numbers = new ArrayList<>(); - for (String intList : inputNumberList) { - numbers.add(Integer.parseInt(intList)); - } - return numbers; - } -} \ No newline at end of file From 6efad2cf5619452b6731cbfa2809df6524474320 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 01:59:09 +0900 Subject: [PATCH 27/40] =?UTF-8?q?Feat:=20OutView=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/simpleCalculator/view/OutView.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/simpleCalculator/view/OutView.java diff --git a/src/main/java/simpleCalculator/view/OutView.java b/src/main/java/simpleCalculator/view/OutView.java new file mode 100644 index 00000000..ddf7e1ce --- /dev/null +++ b/src/main/java/simpleCalculator/view/OutView.java @@ -0,0 +1,8 @@ +package simpleCalculator.view; + +public class OutView { + + public void printResult(int result) { + System.out.println("계산 결과: " + result); + } +} From b14e0b1cd85afb50299694ba1313adb6690e42b5 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 03:04:27 +0900 Subject: [PATCH 28/40] =?UTF-8?q?Refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EA=B0=9C=ED=96=89=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/StringCalculator.java | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/main/java/simpleCalculator/model/StringCalculator.java b/src/main/java/simpleCalculator/model/StringCalculator.java index 79acf562..438d1a35 100644 --- a/src/main/java/simpleCalculator/model/StringCalculator.java +++ b/src/main/java/simpleCalculator/model/StringCalculator.java @@ -5,28 +5,24 @@ public class StringCalculator { private static final String SEPARATOR_DEFAULTS = ",|:"; private static final int ZERO = 0; - public boolean checkBlank(String input) { - + private boolean checkBlank(String input) { return input == null || input.isEmpty(); } - public String[] splitInput(String input) { - + private String[] splitInput(String input) { if (input.startsWith("//")) { return splitByCustom(input); } return input.split(SEPARATOR_DEFAULTS); } - public String[] splitByCustom(String input) { - + private String[] splitByCustom(String input) { String[] separates = input.split("\n", 2); String custom = separates[ZERO].substring(2); return separates[1].split(custom); } - public int[] listToInt(String[] inputList) { - + private int[] listToInt(String[] inputList) { try { int[] numberList = new int[inputList.length]; for (int i = ZERO; i < inputList.length; i++) { @@ -38,8 +34,7 @@ public int[] listToInt(String[] inputList) { } } - public int convertToInt(String input) { - + private int convertToInt(String input) { int number = Integer.parseInt(input); if (number < ZERO) { throw new RuntimeException("음수는 입력할 수 없습니다."); @@ -47,8 +42,7 @@ public int convertToInt(String input) { return number; } - public int sum(int[] inputList) { - + private int sum(int[] inputList) { int total = ZERO; for (int number : inputList) { total += number; @@ -57,10 +51,9 @@ public int sum(int[] inputList) { } public int add(String input) { - if (checkBlank(input)) { return ZERO; } return sum(listToInt(splitInput(input))); } -} +} \ No newline at end of file From b01efb99a59e2b4464b7e6b789d72b9bdc83a10d Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 03:04:58 +0900 Subject: [PATCH 29/40] =?UTF-8?q?feat:=20view=20=EB=B6=84=EB=A6=AC=20-=20I?= =?UTF-8?q?nputView=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/simpleCalculator/view/InputView.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/simpleCalculator/view/InputView.java diff --git a/src/main/java/simpleCalculator/view/InputView.java b/src/main/java/simpleCalculator/view/InputView.java new file mode 100644 index 00000000..eef22150 --- /dev/null +++ b/src/main/java/simpleCalculator/view/InputView.java @@ -0,0 +1,22 @@ +package simpleCalculator.view; + +import java.util.Scanner; + +public class InputView { + + private Scanner scanner; + + public InputView() { + this.scanner = new Scanner(System.in); + } + + public String getSimpleNumber() { + System.out.println("계산할 내용을 입력해주세요.(숫자,연산자,숫자 형식)"); + return scanner.nextLine(); + } + + public String getStringNumber() { + System.out.println("기본(, :)이나 커스텀 구분자(;)를 가지는 문자열을 입력해주세요. (예: 1,2 => 3, //;\\n1;2;3 => 6 반환)"); + return scanner.nextLine(); + } +} \ No newline at end of file From a333ec85aa211290a1978ac25e5668627f5a60ef Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 03:06:21 +0900 Subject: [PATCH 30/40] =?UTF-8?q?Refactor:=20=EC=9A=94=EA=B5=AC=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EC=A4=80=EC=88=98,=20=EA=B8=B0=EC=A1=B4=EC=9D=98?= =?UTF-8?q?=20view=EC=97=90=EC=84=9C=20=EB=8B=B4=EB=8B=B9=ED=95=98?= =?UTF-8?q?=EB=8D=98=20=EB=A1=9C=EC=A7=81=EC=9D=84=20model=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=B2=98=EB=A6=AC=ED=95=98=EA=B8=B0,=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../simpleCalculator/model/Calculator.java | 53 +++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/src/main/java/simpleCalculator/model/Calculator.java b/src/main/java/simpleCalculator/model/Calculator.java index 25c0387b..abf4a577 100644 --- a/src/main/java/simpleCalculator/model/Calculator.java +++ b/src/main/java/simpleCalculator/model/Calculator.java @@ -2,32 +2,67 @@ public class Calculator { - private final int num1; - private final int num2; + private static final int ZERO = 0; + private static final int ONE = 1; + private static final int TWO = 2; - public Calculator(int num1, int num2) { + private int num1; + private int num2; - this.num1 = num1; - this.num2 = num2; + private boolean checkHowManyInput(String[] inputList) { + return inputList.length != TWO; } - public int addNumbers() { + private String[] splitList(String input) { + return input.split(","); + } + + private int convertToInt(String input) { + int number = Integer.parseInt(input); + if (number < ZERO) { + throw new RuntimeException("음수는 입력할 수 없습니다."); + } + return number; + } + + private int[] convertToIntList(String[] inputList) { + try { + int[] numberList = new int[(inputList.length + ONE) / TWO]; + for (int i = ZERO, j = ZERO; i < inputList.length; i += TWO, j++) { + numberList[j] = convertToInt(inputList[i]); + } + return numberList; + } catch (NumberFormatException e) { + throw new RuntimeException("숫자가 아닌 다른 형식이 포함되어 있습니다."); + } + } + public void setNumber(String input) { + String[] inputList = splitList(input); + if(checkHowManyInput(inputList)) { + throw new RuntimeException("2개의 숫자를 입력해주세요."); + } + int[] numbers = convertToIntList(inputList); + this.num1 = numbers[ZERO]; + this.num2 = numbers[ONE]; + } + + public int addNumbers() { return num1 + num2; } public int subNumbers() { - return num1 - num2; } public int divideNumbers() { - + if (num2 == 0) { + throw new RuntimeException("0으로 나누기는 불가합니다."); + } return num1 / num2; } public int multipleNumbers() { - return num1 * num2; } } \ No newline at end of file From 3e57660d1a5ee70851f45ad35249ac88302bb2a2 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 03:07:23 +0900 Subject: [PATCH 31/40] =?UTF-8?q?Refactor:=20View=EC=99=80=20Model=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B8=ED=95=B4=20=EC=88=98=EC=A0=95,=20=EA=B8=B0=EC=A1=B4?= =?UTF-8?q?=EC=9D=98=20outputView=EA=B0=80=20=EB=8B=B4=EB=8B=B9=ED=95=B4?= =?UTF-8?q?=EC=95=BC=20=ED=95=98=EB=8A=94=20=EB=B6=80=EB=B6=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CalculatorController.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/src/main/java/simpleCalculator/controller/CalculatorController.java b/src/main/java/simpleCalculator/controller/CalculatorController.java index 9a5deba3..14ece7df 100644 --- a/src/main/java/simpleCalculator/controller/CalculatorController.java +++ b/src/main/java/simpleCalculator/controller/CalculatorController.java @@ -1,35 +1,43 @@ package simpleCalculator.controller; import simpleCalculator.model.Calculator; -import simpleCalculator.view.CalculatorView; -import java.util.List; +import simpleCalculator.model.StringCalculator; +import simpleCalculator.view.InputView; +import simpleCalculator.view.OutView; public class CalculatorController { - List numbers = CalculatorView.getNumber(); - Calculator calculator = new Calculator(numbers.get(0), numbers.get(1)); + private InputView inputView; + private OutView outView; + private Calculator calculator; + private StringCalculator stringCalculator; - public void doAdd() { - - int addResult = calculator.addNumbers(); - System.out.println("덧셈 결과 : " + addResult); + public CalculatorController() { + this.inputView = new InputView(); + this.outView = new OutView(); + this.calculator = new Calculator(); + this.stringCalculator = new StringCalculator(); } - public void doSub() { - - int subResult = calculator.subNumbers(); - System.out.println("뺄셈 결과 : " + subResult); - } + private void runSimpleCalculator() { + String input = inputView.getSimpleNumber(); + calculator.setNumber(input); - public void doDivide() { + int resultAdd = calculator.addNumbers(); + int resultSub = calculator.subNumbers(); + int resultDiv = calculator.divideNumbers(); + int resultMul = calculator.multipleNumbers(); - int divideResult = calculator.divideNumbers(); - System.out.println("나눗셈 결과 : " + divideResult); + outView.printResult(resultAdd); + outView.printResult(resultSub); + outView.printResult(resultDiv); + outView.printResult(resultMul); } - public void doMultiple() { + private void runStringCalculator() { + String input = inputView.getStringNumber(); + int result = stringCalculator.add(input); - int multipleResult = calculator.multipleNumbers(); - System.out.println("곱셈 결과 : " + multipleResult); + outView.printResult(result); } } \ No newline at end of file From 76e6def1a2877ce328c5b29a9863971db08a26e5 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 03:48:57 +0900 Subject: [PATCH 32/40] =?UTF-8?q?Refactor:=20Test=20=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/simpleCalculator/model/Calculator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/simpleCalculator/model/Calculator.java b/src/main/java/simpleCalculator/model/Calculator.java index abf4a577..6672c6cb 100644 --- a/src/main/java/simpleCalculator/model/Calculator.java +++ b/src/main/java/simpleCalculator/model/Calculator.java @@ -27,9 +27,9 @@ private int convertToInt(String input) { private int[] convertToIntList(String[] inputList) { try { - int[] numberList = new int[(inputList.length + ONE) / TWO]; - for (int i = ZERO, j = ZERO; i < inputList.length; i += TWO, j++) { - numberList[j] = convertToInt(inputList[i]); + int[] numberList = new int[inputList.length]; + for (int i = ZERO; i < inputList.length; i++) { + numberList[i] = convertToInt(inputList[i]); } return numberList; } catch (NumberFormatException e) { From 78c99494ef95499b74510265b74cabfcb03d0b98 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 03:49:26 +0900 Subject: [PATCH 33/40] =?UTF-8?q?Test:=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20=ED=9B=84=20=EC=83=88=EB=A1=9C=EC=9A=B4=20Test=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/CalculatorTest.java | 156 ++++++------------- 1 file changed, 45 insertions(+), 111 deletions(-) diff --git a/src/test/java/calculator/CalculatorTest.java b/src/test/java/calculator/CalculatorTest.java index a8adc38b..94497a0b 100644 --- a/src/test/java/calculator/CalculatorTest.java +++ b/src/test/java/calculator/CalculatorTest.java @@ -1,145 +1,79 @@ package calculator; -import simpleCalculator.model.Calculator; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import simpleCalculator.view.CalculatorView; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; +import simpleCalculator.model.Calculator; + +import static org.junit.jupiter.api.Assertions.*; public class CalculatorTest { - @Nested - @DisplayName("입력관련 테스트") - public class InputTest { - @DisplayName("입력내용 저장 테스트") - @Test - void inputAndSaveTest() { - - //given - InputStream input = System.in; - ByteArrayInputStream in = new ByteArrayInputStream("2,1".getBytes()); - System.setIn(in); - List testList = CalculatorView.getNumber(); - int num1 = testList.get(0); - int num2 = testList.get(1); - //when - //Then - assertEquals(2, num1, "값이 일치하지 않습니다."); - assertEquals(1, num2, "값이 일치하지 않습니다."); - assertNotEquals(1, num1, "값이 일치합니다!"); - assertNotEquals(2, num2, "값이 일치합니다!"); - } - } + private static final int EXPECT_VALUE = 3; - @Nested - @DisplayName("계산기능 테스트") - public class functionTest { + private Calculator calculator; - int testNum1 = 2; - int testNum2 = 1; + @BeforeEach + void setCalculator() { + calculator = new Calculator(); + } - Calculator calculator = new Calculator(testNum1, testNum2); + @DisplayName("연산기능 테스트") + @Nested + class functionTest{ - @DisplayName("더하기 테스트 : 예측값과 입력값이 같은 경우") + @DisplayName("더하기") @Test - void addTest() { - - //given - int expectValue = 3; - int testAdd = calculator.addNumbers(); - //when - //then - assertEquals(testAdd, expectValue, "값이 일치하지 않습니다."); + void testAdd() { + calculator.setNumber("1,2"); + assertEquals(EXPECT_VALUE, calculator.addNumbers()); } - @DisplayName("더하기 테스트 : 예측값과 입력값이 다른 경우") + @DisplayName("빼기") @Test - void addFailTest() { - - //given - int failValue = 0; - int testAdd = calculator.addNumbers(); - //when - //then - assertNotEquals(testAdd, failValue, "값이 일치합니다!"); + void testSub() { + calculator.setNumber("4,1"); + assertEquals(EXPECT_VALUE, calculator.subNumbers()); } - @DisplayName("빼기 테스트 : 예측값과 입력값이 같은 경우") + @DisplayName("나누기") @Test - void subTest() { - - //given - int expectValue = 1; - int testSub = calculator.subNumbers(); - //when - //then - assertEquals(testSub, expectValue, "값이 일치하지 않습니다."); + void testDiv() { + calculator.setNumber("9,3"); + assertEquals(EXPECT_VALUE, calculator.divideNumbers()); } - @DisplayName("빼기 테스트 : 예측값과 입력값이 다른 경우") + @DisplayName("곱하기") @Test - void subFailTest() { - - //given - int failValue = 0; - int testSub = calculator.addNumbers(); - //when - //then - assertNotEquals(testSub, failValue, "값이 일치합니다!"); + void testAMul() { + calculator.setNumber("3,1"); + assertEquals(EXPECT_VALUE, calculator.multipleNumbers()); } + } - @DisplayName("나누기 테스트 : 예측값과 입력값이 같은 경우") - @Test - void divideTest() { - - //given - int expectValue = 2; - int testDivide = calculator.divideNumbers(); - //when - - //then - assertEquals(testDivide, expectValue, "값이 일치하지 않습니다."); - } + @DisplayName("예외처리 테스트") + @Nested + class exceptionTest { - @DisplayName("나누기 테스트 : 예측값과 입력값이 다른 경우") + @DisplayName("0으로 나누기를 시도한 경우") @Test - void divideFailTest() { - - //given - int failValue = 0; - int testDivide = calculator.addNumbers(); - //when - //then - assertNotEquals(testDivide, failValue, "값이 일치합니다!"); + void testDivideByZero() { + calculator.setNumber("10,0"); + assertThrows(RuntimeException.class, () -> calculator.divideNumbers()); } - @DisplayName("곱하기 테스트 : 예측값과 입력값이 같은 경우") + @DisplayName("입력을 2개 미만으로 시도한 경우") @Test - void multipleTest() { - - //given - int expectValue = 2; - int testMultiple = calculator.multipleNumbers(); - //when - //then - assertEquals(testMultiple, expectValue, "값이 일치하지 않습니다."); + void testInputUnderTwo() { + assertThrows(RuntimeException.class, () -> calculator.setNumber("1")); } - @DisplayName("곱하기 테스트 : 예측값과 입력값이 다른 경우") + @DisplayName("입력을 2개 초과로 시도한 경우") @Test - void multipleFailTest() { - - //given - int failValue = 0; - int testMultiple = calculator.addNumbers(); - //when - //then - assertNotEquals(testMultiple, failValue, "값이 일치합니다!"); + void testInputOverTwo() { + assertThrows(RuntimeException.class, () -> calculator.setNumber("1,2,3")); } } -} + +} \ No newline at end of file From d6e7d1c6582177a54aa93d7899cad7aaede89e11 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 11:26:19 +0900 Subject: [PATCH 34/40] =?UTF-8?q?Test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=83=81=EC=88=98=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/CalculatorTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/test/java/calculator/CalculatorTest.java b/src/test/java/calculator/CalculatorTest.java index 94497a0b..f56ae28b 100644 --- a/src/test/java/calculator/CalculatorTest.java +++ b/src/test/java/calculator/CalculatorTest.java @@ -11,7 +11,6 @@ public class CalculatorTest { private static final int EXPECT_VALUE = 3; - private Calculator calculator; @BeforeEach @@ -21,7 +20,7 @@ void setCalculator() { @DisplayName("연산기능 테스트") @Nested - class functionTest{ + class functionTest { @DisplayName("더하기") @Test @@ -75,5 +74,4 @@ void testInputOverTwo() { assertThrows(RuntimeException.class, () -> calculator.setNumber("1,2,3")); } } - } \ No newline at end of file From 40c85488bb5f078925a217513538880dbdf66c06 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 11:28:14 +0900 Subject: [PATCH 35/40] =?UTF-8?q?Test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=83=81=EC=88=98=20=EC=84=A4=EC=A0=95,?= =?UTF-8?q?=20=EB=B0=8F=20=EA=B0=9C=ED=96=89=20=EC=88=98=EC=A0=95,=20?= =?UTF-8?q?=EC=A4=91=EC=B2=A9=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StringCalculatorTestAssertJ.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/test/java/stringCalculator/StringCalculatorTestAssertJ.java b/src/test/java/stringCalculator/StringCalculatorTestAssertJ.java index bd7d9fe1..7c64e67d 100644 --- a/src/test/java/stringCalculator/StringCalculatorTestAssertJ.java +++ b/src/test/java/stringCalculator/StringCalculatorTestAssertJ.java @@ -4,41 +4,48 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import simpleCalculator.model.StringCalculator; + import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; public class StringCalculatorTestAssertJ { + private static final int EXPECT_VALUE_ZERO = 0; + private static final int EXPECT_VALUE_SIX = 6; + + @DisplayName("연산기능 테스트") @Nested - class newTest { + class functionTest { @Test @DisplayName("값이 없거나 빈 경우") public void nullAndEmpty() { - StringCalculator calculator = new StringCalculator(); - assertThat(0).isEqualTo(calculator.add(null)); - assertThat(0).isEqualTo(calculator.add("")); + assertThat(EXPECT_VALUE_ZERO).isEqualTo(calculator.add(null)); + assertThat(EXPECT_VALUE_ZERO).isEqualTo(calculator.add("")); } @Test @DisplayName("기본 구분자를 사용하는 경우") public void addWithDefault() { - StringCalculator calculator = new StringCalculator(); - assertThat(6).isEqualTo(calculator.add("1,2,3")); - assertThat(6).isEqualTo(calculator.add("1,2:3")); - assertThat(6).isEqualTo(calculator.add("1:2,3")); - assertThat(6).isEqualTo(calculator.add("1:2:3")); + assertThat(EXPECT_VALUE_SIX).isEqualTo(calculator.add("1,2,3")); + assertThat(EXPECT_VALUE_SIX).isEqualTo(calculator.add("1,2:3")); + assertThat(EXPECT_VALUE_SIX).isEqualTo(calculator.add("1:2,3")); + assertThat(EXPECT_VALUE_SIX).isEqualTo(calculator.add("1:2:3")); } @Test @DisplayName("커스텀 구분자를 사용하는 경우") public void addWithCustom() { - StringCalculator calculator = new StringCalculator(); - assertThat(6).isEqualTo(calculator.add("//;\n1;2;3")); + assertThat(EXPECT_VALUE_SIX).isEqualTo(calculator.add("//;\n1;2;3")); } + } + + @DisplayName("예외처리 테스트") + @Nested + public class exceptionTest { @DisplayName("숫자가 아닌 다른 값을 입력한 경우") @Nested @@ -47,7 +54,6 @@ public class isNotNumber { @Test @DisplayName("예외처리 확인") public void onlyException() { - StringCalculator calculator = new StringCalculator(); assertThatThrownBy(() -> { calculator.add("hi,1,2"); @@ -57,7 +63,6 @@ public void onlyException() { @Test @DisplayName("예외처리와 예외메세지 확인") public void messageWithException() { - StringCalculator calculator = new StringCalculator(); assertThatThrownBy(() -> { calculator.add("hi,1,2"); @@ -73,7 +78,6 @@ public class isNegative { @Test @DisplayName("예외처리 확인") public void onlyException() { - StringCalculator calculator = new StringCalculator(); assertThatThrownBy(() -> { calculator.add("-1,1,2"); @@ -83,7 +87,6 @@ public void onlyException() { @Test @DisplayName("예외처리와 예외메세지 확인") public void messageWithException() { - StringCalculator calculator = new StringCalculator(); assertThatThrownBy(() -> { calculator.add("-1,1,2"); From b1151219fb7919cd897a71196a0a6eeba0c0071b Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 11:28:18 +0900 Subject: [PATCH 36/40] =?UTF-8?q?Test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=83=81=EC=88=98=20=EC=84=A4=EC=A0=95,?= =?UTF-8?q?=20=EB=B0=8F=20=EA=B0=9C=ED=96=89=20=EC=88=98=EC=A0=95,=20?= =?UTF-8?q?=EC=A4=91=EC=B2=A9=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StringCalculatorTestJUnit5.java | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/test/java/stringCalculator/StringCalculatorTestJUnit5.java b/src/test/java/stringCalculator/StringCalculatorTestJUnit5.java index e584a84e..ac4bbfd9 100644 --- a/src/test/java/stringCalculator/StringCalculatorTestJUnit5.java +++ b/src/test/java/stringCalculator/StringCalculatorTestJUnit5.java @@ -1,47 +1,54 @@ package stringCalculator; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import simpleCalculator.model.StringCalculator; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; public class StringCalculatorTestJUnit5 { - - public static class stringTest { - + + private static final int EXPECT_VALUE_ZERO = 0; + private static final int EXPECT_VALUE_SIX = 6; + + @DisplayName("연산기능 테스트") + @Nested + class functionTest { + @Test @DisplayName("값이 없거나 비어있는 경우") public void nullAndEmpty() { - StringCalculator calculator = new StringCalculator(); - assertEquals(0, calculator.add(null)); - assertEquals(0, calculator.add("")); + assertEquals(EXPECT_VALUE_ZERO, calculator.add(null)); + assertEquals(EXPECT_VALUE_ZERO, calculator.add("")); } @Test @DisplayName("기본 구분자를 사용하는 경우") public void addWithDefault() { - StringCalculator calculator = new StringCalculator(); - assertEquals(6, calculator.add("1,2,3")); - assertEquals(6, calculator.add("1,2:3")); - assertEquals(6, calculator.add("1:2,3")); - assertEquals(6, calculator.add("1:2:3")); + assertEquals(EXPECT_VALUE_SIX, calculator.add("1,2,3")); + assertEquals(EXPECT_VALUE_SIX, calculator.add("1,2:3")); + assertEquals(EXPECT_VALUE_SIX, calculator.add("1:2,3")); + assertEquals(EXPECT_VALUE_SIX, calculator.add("1:2:3")); } @Test @DisplayName("커스텀 구분자를 사용하는 경우") public void addWithCustom() { - StringCalculator calculator = new StringCalculator(); - assertEquals(6, calculator.add("//;\n1;2;3")); + assertEquals(EXPECT_VALUE_SIX, calculator.add("//;\n1;2;3")); } + } + @DisplayName("예외처리 테스트") + @Nested + class exceptionTest { @Test @DisplayName("숫자가 아닌 다른 값을 입력한 경우") public void isNotNumber() { - StringCalculator calculator = new StringCalculator(); assertThrows(RuntimeException.class, () -> calculator.add("hi,1,2")); assertThrows(RuntimeException.class, () -> calculator.add("hi")); @@ -50,10 +57,9 @@ public void isNotNumber() { @Test @DisplayName("음수를 입력한 경우") public void isNegative() { - StringCalculator calculator = new StringCalculator(); assertThrows(RuntimeException.class, () -> calculator.add("-2,1,2")); assertThrows(RuntimeException.class, () -> calculator.add("-2")); } } -} +} \ No newline at end of file From 4fb6e5c2949557a678181775273f2660535b1019 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Wed, 15 May 2024 11:53:38 +0900 Subject: [PATCH 37/40] =?UTF-8?q?Refactor:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EB=8A=94=20?= =?UTF-8?q?inputView=20EOF=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/simpleCalculator/view/InputView.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/simpleCalculator/view/InputView.java b/src/main/java/simpleCalculator/view/InputView.java index eef22150..c3b4de2f 100644 --- a/src/main/java/simpleCalculator/view/InputView.java +++ b/src/main/java/simpleCalculator/view/InputView.java @@ -12,11 +12,17 @@ public InputView() { public String getSimpleNumber() { System.out.println("계산할 내용을 입력해주세요.(숫자,연산자,숫자 형식)"); - return scanner.nextLine(); + while (scanner.hasNextLine()) { + return scanner.nextLine(); + } + return null; } public String getStringNumber() { System.out.println("기본(, :)이나 커스텀 구분자(;)를 가지는 문자열을 입력해주세요. (예: 1,2 => 3, //;\\n1;2;3 => 6 반환)"); - return scanner.nextLine(); + while (scanner.hasNextLine()) { + return scanner.nextLine(); + } + return null; } } \ No newline at end of file From 8de5ddc1384beafdb6d38c2e1f3a1905ce63cec9 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Thu, 23 May 2024 00:46:01 +0900 Subject: [PATCH 38/40] =?UTF-8?q?Refactor:=20=ED=8C=8C=EC=9D=BC=EC=9D=98?= =?UTF-8?q?=20=EB=81=9D=EC=97=90=20=EA=B0=9C=ED=96=89=EC=9D=84=20=ED=86=B5?= =?UTF-8?q?=ED=95=B4=20EOF=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../simpleCalculator/controller/CalculatorController.java | 2 +- src/main/java/simpleCalculator/model/Calculator.java | 4 ++-- src/main/java/simpleCalculator/model/StringCalculator.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/simpleCalculator/controller/CalculatorController.java b/src/main/java/simpleCalculator/controller/CalculatorController.java index 14ece7df..6cfb9cf0 100644 --- a/src/main/java/simpleCalculator/controller/CalculatorController.java +++ b/src/main/java/simpleCalculator/controller/CalculatorController.java @@ -40,4 +40,4 @@ private void runStringCalculator() { outView.printResult(result); } -} \ No newline at end of file +} diff --git a/src/main/java/simpleCalculator/model/Calculator.java b/src/main/java/simpleCalculator/model/Calculator.java index 6672c6cb..74f8f00e 100644 --- a/src/main/java/simpleCalculator/model/Calculator.java +++ b/src/main/java/simpleCalculator/model/Calculator.java @@ -39,7 +39,7 @@ private int[] convertToIntList(String[] inputList) { public void setNumber(String input) { String[] inputList = splitList(input); - if(checkHowManyInput(inputList)) { + if (checkHowManyInput(inputList)) { throw new RuntimeException("2개의 숫자를 입력해주세요."); } int[] numbers = convertToIntList(inputList); @@ -65,4 +65,4 @@ public int divideNumbers() { public int multipleNumbers() { return num1 * num2; } -} \ No newline at end of file +} diff --git a/src/main/java/simpleCalculator/model/StringCalculator.java b/src/main/java/simpleCalculator/model/StringCalculator.java index 438d1a35..259dee63 100644 --- a/src/main/java/simpleCalculator/model/StringCalculator.java +++ b/src/main/java/simpleCalculator/model/StringCalculator.java @@ -56,4 +56,4 @@ public int add(String input) { } return sum(listToInt(splitInput(input))); } -} \ No newline at end of file +} From 4601969f86408dee5b54ca386b5dd718e196a02b Mon Sep 17 00:00:00 2001 From: mlngwan Date: Thu, 23 May 2024 00:46:27 +0900 Subject: [PATCH 39/40] =?UTF-8?q?Test:=20=EC=BB=A8=EB=B2=A4=EC=85=98=20?= =?UTF-8?q?=EC=A7=80=EC=BC=9C=EC=A7=80=EC=A7=80=20=EC=95=8A=EC=9D=80=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/calculator/CalculatorTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/calculator/CalculatorTest.java b/src/test/java/calculator/CalculatorTest.java index f56ae28b..39890519 100644 --- a/src/test/java/calculator/CalculatorTest.java +++ b/src/test/java/calculator/CalculatorTest.java @@ -11,6 +11,7 @@ public class CalculatorTest { private static final int EXPECT_VALUE = 3; + private Calculator calculator; @BeforeEach From f1858429b7f614c80602e8ac732d936e996c42f0 Mon Sep 17 00:00:00 2001 From: mlngwan Date: Thu, 23 May 2024 00:47:06 +0900 Subject: [PATCH 40/40] =?UTF-8?q?Refactoring:=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20=EB=B6=80=EB=B6=84=20=EC=A0=9C=EA=B1=B0?= =?UTF-8?q?=EB=A1=9C=20=EC=BD=94=EB=93=9C=20=EA=B0=84=EA=B2=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/simpleCalculator/view/InputView.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/java/simpleCalculator/view/InputView.java b/src/main/java/simpleCalculator/view/InputView.java index c3b4de2f..308bef22 100644 --- a/src/main/java/simpleCalculator/view/InputView.java +++ b/src/main/java/simpleCalculator/view/InputView.java @@ -4,7 +4,7 @@ public class InputView { - private Scanner scanner; + private final Scanner scanner; public InputView() { this.scanner = new Scanner(System.in); @@ -12,17 +12,11 @@ public InputView() { public String getSimpleNumber() { System.out.println("계산할 내용을 입력해주세요.(숫자,연산자,숫자 형식)"); - while (scanner.hasNextLine()) { - return scanner.nextLine(); - } - return null; + return scanner.nextLine(); } public String getStringNumber() { System.out.println("기본(, :)이나 커스텀 구분자(;)를 가지는 문자열을 입력해주세요. (예: 1,2 => 3, //;\\n1;2;3 => 6 반환)"); - while (scanner.hasNextLine()) { - return scanner.nextLine(); - } - return null; + return scanner.nextLine(); } -} \ No newline at end of file +}