항상 저희 러닝하이
팀은 테스트 코드를 작성하며 개발을 진행하려 노력하고 있습니다.
기능을 구현하다보면 다른 모듈에 영향을 끼치게 만들 수도 있습니다. 그러지 않기 위해 테스트 코드를 작성하고 있습니다!! 메소드가 완성되고 테스트 코드를 작성하면 전체 테스트는 실패하게 되는 경우도 있더라구요,,,ㅠ
게다가 구현되는 기능이 많아지면서 막대한 양의 테스트 코드가 생산되면서 일일히 확인하기가 어렵다는 점이 있었습니다,,, 그래서 찾은 방법이 PR
를 작성하면 자동으로 테스트를 확인해주는 git actions를 활용한 테스트 자동화
입니다.
러닝하이
는 gradle로 프로젝트를 빌드하여 gradle 기준으로 정리하겠습니다.
깃허브 메인 레포지토리 - Action 탭 - Java With Gradle
을 선택해주어 .github/workflow/gradle.yml
를 만들어줍니다.
기본 설정에는 `main'브랜치에 테스트가 돌아가도록 되어 있어 각자의 git banch
전략에 맞추어 설정을 변경해주시면 됩니다. 저희는 dev
브랜치로 개발을 진행중이었으므로 변경하도록 하겠습니다.
name: Java CI with Gradle
on:
pull_request:
branches: [ "dev" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
## MySQL 환경을 테스트 환경에서 설정합니다.
- name: Setup MySQL
uses: samin/mysql-action@v1
with:
character set server: 'utf8'
mysql database: 'runninghi'
mysql user: ${{ secrets.MYSQL_USERNAME }}
mysql password: ${{ secrets.MYSQL_PASSWORD }}
## resources 디렉토리 확인 및 생성, application.yml 설정
- name: Setup application.yml
run: |
mkdir -p ./src/main/resources
touch ./src/main/resources/application.yml
echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml
shell: bash
- name: Add permission
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew --info test
- name: Build with Gradle
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: build
이렇게 설정해두면, PR을 작성했을 때 자동으로 github 환경에서 테스트를 진해해줍니다. git branch rule
을 통해 테스트 통과를 못하면 Merge
를 못하게 막아두었습니다.
여기서 주의할 점은, MySQL 계정 정보
와 application.yml
은 공개되면 안되는 정보입니다. 하지만 해당 정보들이 없다면 테스트는 빌드과정부터 실패하므로 해당 내용들을 git secrets
를 활용해서 정보를 넣어주고 gradle.yml
에서 테스트 진행될 때 생성되도록 설정해두었습니다.
메인 레포지토리의 setting
에서, secrets and variables - Actions
에서 직접 추가해주면 됩니다.
gradle.yml
파일에 명칭이 동일해야 값이 들어간다는 것을 주의해야 합니다.
적어줄 때는 ${{ secrets.MYSQL_USERNAME }}
과 같은 방식으로 적어주시면 됩니다.
이것으로 저희 프로젝트는 테스트를 일일히 작성자가 모두 돌려볼 필요 없이 PR 시에 체크를 해주어 더 편하게 개발할 수 있게되었습니다. 가끔 로컬 환경
에서는 모두 통과해도, 깃허브 환경
에서는 통과를 못하는 경우가 발생합니다. 해당 부분도 수정할 수 있어 더욱 완벽한 테스트 코드를 작성할 수 있어 좋은 것 같습니다!