일단 시작.

[TIL] Github Action 3 - Mockito 테스트(O) 본문

STUDY/GIT

[TIL] Github Action 3 - Mockito 테스트(O)

꾸양! 2023. 8. 3. 20:55

1. dev 브랜치에 푸시하거나 PR보낼때마다 CI check

on:
  push:
    branches: [ "dev" ]
  pull_request:
    branches: [ "dev" ]

2. PR에 테스트 결과 코멘트로 알려 줄 때 필요한 허가.

permissions:
  checks: write
  pull-requests: write

3. 레포지토리 체크아웃

레포지토리의 코드를 runner 컴퓨터에서 돌려볼 수 있도록 pull로 땡겨가는 코드.

- name: 레포지토리 체크아웃
  uses: actions/checkout@v3

4. 현재 내가 사용하는 Spring Boot는 3.x버전은 Java 17부터 지원하기 때문에 JDK 17 설치

- name: JDK 17 설치
  uses: actions/setup-java@v3
  with:
    java-version: '17'
    distribution: 'adopt'

5. Gradle 실행 허가

- name: Gradle 실행 허가
  run: chmod +x ./gradlew

6. Build With Gradle

- name: Build with Gradle
  uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
  with:
    arguments: build

※ 테스트 코드가 없을 시 이렇게 작성하면 된다.

- name: Build with Gradle
  run: ./gradlew clean build --exclude-task test

7. 테스트 결과 PR에 코멘트 작성

- name: Publish Test Results
  uses: EnricoMi/publish-unit-test-result-action@v2
  if: always()
  with:
    files: |
      **/build/test-results/**/*.xml

8. PR 어디가 틀렸는지 알려주는 기능(file changed에서 알 수 있다.)

- name: Publish Test Report
  uses: mikepenz/action-junit-report@v3
  if: success() || failure() # always run even if the previous step fails
  with:
    report_paths: '**/build/test-results/test/TEST-*.xml'

버전이 안맞을 때는 uses를 참고하여 구글링해보면 해당 기능을 구현해놓은 깃허브에 들어갈 수 있고, 깃허브 README 에 어떻게 작성해야 하는지 다 가르쳐준다...! 구글링해서 적용시켰을 때 해당 부분에서 실패하면 공식 깃허브를 들어가서 버전이 바뀌지는 않았는지 체크해보자.

Mockito를 이용한 Test는 어플리케이션을 실행시키지 않기 때문에 이 코드로 해도 CI를 적용시킬 수 있으나 Spring Boot Test의 경우 어플리케이션을 실행시키고 테스트를 해보는 것이기 때문에 DB연결 코드가 추가적으로 더 필요하다. 


전체 코드

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle

name: develop CI check

on:
  push:
    branches: [ "dev" ]
  pull_request:
    branches: [ "dev" ]

permissions:
  checks: write
  pull-requests: write

jobs:
  build:

    runs-on: ubuntu-latest

    steps:

      - name: 레포지토리 체크아웃
        uses: actions/checkout@v3

      - name: JDK 17 설치
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'adopt'

      # gradle 실행 허가
      - name: Run chmod to make gradlew executable
        run: chmod +x ./gradlew

      # build Test
      - name: Build with Gradle
        uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
        with:
          arguments: build
      
			# run: ./gradlew clean build --exclude-task test (테스트 코드 없을때)

      # PR conversation & Action에 몇 개의 테스트 중에 몇 개가 통과 되었는지
      # 어떤 테스트 파일에서 실패했는지 가르쳐 줌.
      - name: Publish Test Results
        uses: EnricoMi/publish-unit-test-result-action@v2
        if: always()
        with:
          files: |
            **/build/test-results/**/*.xml

      # 테스트 파일 내에서 어디에서 테스트가 실패되었는지 가르쳐 줌.
      # Files changed에서 어디에서 잘못되었는지 가르쳐준다.
      - name: Publish Test Report
        uses: mikepenz/action-junit-report@v3
        if: success() || failure() # always run even if the previous step fails
        with:
          report_paths: '**/build/test-results/test/TEST-*.xml'