diff --git a/.github/workflows/auto-reviewer.yml b/.github/workflows/auto-reviewer.yml new file mode 100644 index 0000000..5990c70 --- /dev/null +++ b/.github/workflows/auto-reviewer.yml @@ -0,0 +1,15 @@ +name: Review Assign + +on: + pull_request: + types: [opened, ready_for_review] + +jobs: + assign: + runs-on: ubuntu-latest + steps: + - uses: hkusu/review-assign-action@v1 + with: + assignees: ${{ github.actor }} + reviewers: ${{ vars.REVIEWERS }} + max-num-of-reviewers: 1 diff --git a/README.md b/README.md index 05a04f9..bdd03e9 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ ## [NEXTSTEP 플레이그라운드의 미션 진행 과정](https://github.com/next-step/nextstep-docs/blob/master/playground/README.md) --- -1. 피드백 강의 전까지 미션 진행 -> 피드백 강의 전까지 혼자 힘으로 미션 진행. 미션을 진행하면서 하나의 작업이 끝날 때 마다 add, commit -> 예를 들어 다음 숫자 야구 게임의 경우 0, 1, 2단계까지 구현을 완료한 후 push. 개인 레포지토리, 개인 브랜치에서 진행. +1. 피드백 강의 전까지 미션 진행 +- 피드백 강의 전까지 혼자 힘으로 미션 진행, 미션을 진행하면서 하나의 작업이 끝날 때 마다 add, commit + - `main` 미션 레포지토리를 본인의 로컬 저장소로 `clone` 하여 프로젝트 환경을 구성합니다. + - 예를 들어 다음 숫자 야구 게임의 경우 각 미션 별 `branch`를 `pull` 받은 후 미션을 해결 한 뒤 `PR`을 보냅니다. + - 코드 수정이 더 이상 일어나지 않을 경우 리뷰어를 설정하고 다음 미션을 진행 합니다. ![mission baseball](https://raw.githubusercontent.com/next-step/nextstep-docs/master/playground/images/mission_baseball.png) --- -2. 피드백 앞 단계까지 미션 구현을 완료한 후 피드백 강의를 학습한다. +2. 피드백 앞 단계까지 미션 구현을 완료한 후 피드백 강의를 학습합니다. --- -3. (임시로 만들어본 규칙입니다) 자신의 브랜치에 구현해둔 코드를 피드백을 참고해 수정해본다. -해당 코드를 본 레포지토리의 main으로 합병하는 PR을 요청해 팀원들의 피드백을 받는다. +3. 자신의 브랜치에 구현해둔 코드를 피드백을 참고해 수정해봅니다. +- 해당 코드를 본 레포지토리의 `main`으로 합병하는 `PR`을 요청해 팀원들의 피드백을 받습니다. diff --git a/src/test/java/study/SetTest.java b/src/test/java/study/SetTest.java new file mode 100644 index 0000000..1116565 --- /dev/null +++ b/src/test/java/study/SetTest.java @@ -0,0 +1,62 @@ +package study; + +import jdk.internal.joptsimple.internal.Strings; +import org.assertj.core.internal.Integers; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.HashSet; +import java.util.Set; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class SetTest { + private Set numbers; + + @BeforeEach + void setUp() { + numbers = new HashSet<>(); + numbers.add(1); + numbers.add(1); + numbers.add(2); + numbers.add(3); + } + + @Test + @DisplayName("HashSet의 크기 확인") + void testHashSetSize() { + assertThat(numbers.size()).isEqualTo(3); + } + + @Test + void contains() { + assertThat(numbers.contains(1)).isTrue(); + assertThat(numbers.contains(2)).isTrue(); + assertThat(numbers.contains(3)).isTrue(); + } + + @ParameterizedTest + @ValueSource(ints = {1,2,3}) + @DisplayName("1,2,3 존재하는지 확인") + void testContainValue(int number) { + assertTrue(numbers.contains(number)); + } + + @ParameterizedTest + @CsvSource(value = { + "1, true", + "2, true", + "3, true", + "4, false", + "5, false"}, delimiter = ',') + @DisplayName("존재하는 값은 true, 아닌 값은 false 반환하는지 확인") + void testIsContainValue(int number, boolean expectedResult) { + assertThat(numbers.contains(number)).isEqualTo(expectedResult); + } +} diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java index 43e47d9..3ea08d5 100644 --- a/src/test/java/study/StringTest.java +++ b/src/test/java/study/StringTest.java @@ -1,8 +1,11 @@ package study; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertThrows; public class StringTest { @Test @@ -10,4 +13,36 @@ void replace() { String actual = "abc".replace("b", "d"); assertThat(actual).isEqualTo("adc"); } + + @Test + @DisplayName("\"1,2\"을 ,로 split 했을 때 1과 2로 잘 분리되는지 검사") + void split1() { + String[] actual = "1,2".split(","); + assertThat(actual).contains("1","2"); + } + + @Test + @DisplayName("\"1\"을 ,로 split 했을 때 1만을 포함하는 배열이 반환되는지 검사") + void split2() { + String[] actual = "1".split(","); + assertThat(actual).containsExactly("1"); + } + + @Test + @DisplayName("(1,2) 값에서 () 제거 후 반환 검사") + void substring() { + String actual = "(1,2)"; + String result = actual.substring(1, actual.length() - 1); + assertThat(result).isEqualTo("1,2"); + } + + @Test + @DisplayName("문자열의 특정 위치의 문자를 가져올 때, 인덱스를 벗어나면 예외 발생") + void charAt() { + String actual = "abc"; + assertThatThrownBy(() -> { + actual.charAt(20); + }).isInstanceOf(IndexOutOfBoundsException.class) + .hasMessageContaining("String index out of range"); + } }