전체 글
-
👻 Mockito☕️ java 2023. 10. 31. 14:20
우아한테크코스 프리코스의 경주 게임미션을 진행하면서 임의로 생성한 값에 의해 자동차가 전진하거나 정지하는 테스트 코드를 작성하는 도중 임의로 생성되는 값을 미리 테스트 코드내에서 지정해주고 이를 통해 기능을 테스트하고 싶었다. 즉, 어떤 메소드를 실행했을 때 해당 메소드가 어떤 리턴 값을 리턴할 지를 정의해놓고 싶었다. 이런 방법을 사용하기 위해서 Mockito를 이용했다. 🔍 Mockito ❓ Mock 💡 Mock - “모의”, “가짜의” 라는 뜻 - 테스트할 때 필요한 실제 객체와 동일한 모의 객체를 만들어 테스트의 효율성을 높이기 위해 사용 📖 위키에 정의된 Mock 모의 객체(Mock Object)란 주로 객체 지향 프로그래밍으로 개발한 프로그램을 테스트할 경우 테스트를 수행할 모듈과 연결되는 외..
-
🔗 Java 문자열와 구분자☕️ java 2023. 10. 30. 15:56
우아한테크코스의 프리코스 자동차 경주 게임 미션에 아래와 같은 요구사항이 있었다. 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다. 우승자가 여러 명일 경우 쉼표(,)를 이용하여 구분한다. 이렇게 문자열을 연결해야하는 요구사항에 대해 해결하고자 여러 방법을 찾아보았다. 🧩 StringBuilder ⚠️ String + 연산의 문제 자바에서 String은 불변이라 문자열에 대해 수정을 할 수 없다. String str1 = "abc"; String str2 = "def"; String resulta = str1 + str2; // abcdef 위와 같은 코드가 있을 때, 자바에서는 str1의 길이 + str2의 길이를 가지는 새로운 String을 만들어 낸다. 따..
-
Multiple Assertions☕️ java 2023. 10. 29. 12:47
우테코 프리코스 - 자동차 경주 게임 미션을 진행하면서 하나의 테스트 함수에서 기능에 대해 여러 결과를 검증하기 위해서 assertThat() 을 여러 번 이용해 검증을 했다. 하지만, 이 방법을 사용하다 보니 각 검증 코드가 실패한다면 다음 검증을 수행하지 않고 테스트 함수가 바로 중단되었다. 🆚 assertThat 과 assertAll assertThat을 여러개 사용해서 여러 결과를 검증하는 방법을 사용했을 때는 하나의 검증 코드가 실패하면 그 다음 검증들은 수행되지 않았기에 여러 검증 코드들을 assertAll 으로 grouping 하여 모든 검증을 수행하고 나온 결과를 한번에 볼 수 있도록 했다. assertThat을 이용한 테스트 코드 @Test void assertThatTest() { //..
-
[우아한테크코스-프리코스] 1주차 숫자야구 회고를 해보자 ⚾️⭐️ 우아한테크코스 2023. 10. 26. 14:15
우아한테크코스 - 프리코스에 참여하고 첫 주의 미션으로 ‘숫자야구’를 구현했어야 했다. 🔗 나의 Pull Request Link ⚾ 숫자야구 🎯 요구사항 [x] 1 ~ 9 사이의 서로 다른 수로 이루어진 3자리 수를 맞추기 [x] 같은 수가 같은 자리인 경우 스트라이크, 다른 자리인 경우 볼 [x] 컴퓨터가 1 ~ 9 까지의 서로 다른 임의의 수 3개를 선택 [x] 게임 플레이어는 서로 다른 3개의 숫자를 입력하고 컴퓨터는 입력한 숫자에 대한 결과 출력 🤔 고민 1️⃣ 숫자야구에 필요한 상수들을 어떻게 관리할까? 숫자야구에서 필요한 상수들이 여러개 있었다. 몇 자리 수인지 게임 재시작 입력 값 게임 종료 입력 값 처음 생각한 것은 static final 변수로 선언해 사용하는 곳에서 사용하도록 했다. p..
-
☕️ Java 17☕️ java 2023. 10. 25. 03:48
우아한테크코스 6기 프리코스에 참여하게 되어 요구사항인 Java 17 을 이용하게 되었다. 기존에는 Java 11을 주로 사용했던 나로써 이번 기회에 Java 17에 대해 더 알아보고 사용하고자 정리해보려고 한다 🔥 ☕ Java 17 💡 Java 17 Version - 2021년 9월 새로 공개한 LTS(Long-Term Support) 버전 ⭐ Java 17의 기능 Java 11과 비교했을 때 Java 17에서 사용할 수 있는 몇 가지 기능들에 대해 살펴보자. Text Block Record Sealed Classes Switch Expression Stream.toList() 1️⃣ Text Block JDK 15부터 정식 지원하는 기능 3개의 큰 따옴표를 통해 Java 문자열을 보다 가독성있게 작성..
-
🆚 AssertJ과 JUnit 의 Assertions 비교☕️ java 2023. 10. 25. 01:43
📌 Assertions 비교 (AssertJ vs JUnit) 이번에 테스트 코드를 작성하는 과정에서 Assertions를 사용하고 싶은데 위 두 가지의 차이점과 어떤 것을 선택해야 하는지 궁금했다. 🧩 AssertJ 테스트에 관련된 많은 기능을 제공하고 메서드 체이닝으로 가독성 높은 테스트 코드 작성을 지원하는 오픈 라이브러리 배우기 쉽다. 사용하기 쉽다 fluent 코드를 더 읽시 쉽다 자동완성을 지원한다. 🧑🏻💻 예시 📍 org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Assertions; public class JUnitTest { @Test public void testEqual() { int number1 = 1; int numb..
-
@ParameterizedTest☕️ java 2023. 10. 25. 01:19
Test 코드를 작성하는 도중 실패 케이스마다 실패 테스트 메서드를 만들다보니 중복되는 코드도 많아지고 이로 인해 코드의 양이 많아지는 문제가 발생했다. 이런 문제를 해결하기 위해 @ParameterizedTest 를 사용해 해결하고자 알아보게 되었다. 📌 Parameterized Test 💡 Parameterized Test - 다른 인수로 여러번 테스트를 실행하는 것을 가능하게 한다. - @Test 대신 @ParameterizedTest 를 사용한다. - 최소 하나의 source 어노테이션을 붙여주어야 한다. 💡 다양한 Source 종류들 1️⃣ ValueSource @ParameterizedTest @ValueSource(strings = {"beomsic", "beom"}) void valueSo..
-
👀 Unit Test 네이밍 컨벤션☕️ java 2023. 10. 24. 15:31
테스트 코드를 작성하는 도중 테스트 메서드의 네이밍을 어떤식으로 해야 보기 좋고 직관적일지 고민하게 되었다. 자주 사용되는 자바 테스트 네이밍을 찾아서 그 중 하나를 사용하고자 한다. 💡네이밍을 하는 몇 가지 추천 방법 테스트명은 특정한 필요조건을 명시한다. 테스트명에는 기대되는 Input이나 상태, 그에 상응하는 결과값을 포함할 수 있다. 테스트명은 워크플로우와 아웃풋을 명시하는 선언이나 사실들로 나타내야 한다. 테스트명에는 테스트 메서드나 클래스의 이름을 포함할 수 있다. 🧩 네이밍 예시 📕 메서드명_테스트하고자하는상태_예상되는결과 - ex) isAdult_AgeLessthan18_False - 단점: 메서드 이름이 바뀌면 테스트명을 변경해주어야 한다. 📕 메서드명_예상되는결과_테스트하고자하는상태 -..