파이썬과 노드 환경에서의 테스트는 적용해본 경험이 있기 때문에 자바 환경에서도 거부감 없이 시도해봤다.
## test.yml 구성
우분투에 자바를 설치하고, gradlew test를 실행하는 것으로 작성했다.
name: Test
on:
pull_request:
branches:
- main
paths: ["backend/**"]
push:
branches:
- main
paths: ["backend/**"]
jobs:
test:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./backend
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew test
## 터짐 - 환경변수 어디갔어~
분명히 난 인텔리제이에서 잘 작동하는 테스트를 돌렸다.
명령어는 간단하게 “./gradlew test”라고 하면 될줄 알았는데.. 예외가 바로 반겨주었다.
MusicinabottleApplicationTests > contextLoads() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:795
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:795
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:795
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:795
Caused by: org.springframework.beans.factory.BeanCreationException at AutowiredAnnotationBeanPostProcessor.java:514
Caused by: java.lang.IllegalArgumentException at PropertyPlaceholderHelper.java:180
자프링이라 그런지 나와 같은 오류를 겪은 사람이 많았고 문제를 찾는 좋은 방법을 알게되었는데,
-i 옵션을 주면 로그를 확인할 수 있다는 것이다. “./gradlew test -i”
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'YOUTUBE_API_KEY' in value "${YOUTUBE_API_KEY}"
근본적인 원인은 이것 이였는데, 알고보니 환경변수를 안줘서 그렇다는 것이였다.
## gradlew test 대신 gradlew build?
테스트가 목적이니 test를 쓰려고 했지만, 대부분의 예제는 build 명령어를 실행하고 있었다.
이 워크플로우로 빌드를 하려고 한건 아니라서 뭔가 뭔가 이상했다.
build는 어떤 일을 할까? gradlew tasks를 입력하면 가능한 명령어를 볼 수 있다.
assemble - Assembles the outputs of this project.
bootBuildImage - Builds an OCI image of the application using the output of the bootJar task
bootJar - Assembles an executable jar archive containing the main classes and their dependencies.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
classes - Assembles main classes.
clean - Deletes the build directory.
jar - Assembles a jar archive containing the classes of the 'main' feature.
resolveMainClassName - Resolves the name of the application's main class.
resolveTestMainClassName - Resolves the name of the application's test main class.
testClasses - Assembles test classes.
…
check - Runs all checks.
test - Runs the test suite.
build는 assemble과 test를 합친건데, assemble은 프로젝트를 빌드하고 패키징 한다.
지금은.. 빌드라는 과정도 테스트 하는건가? 라고 생각해야겠다. (근데 test도 빌드하긴 한다)
## 결론
환경 변수 추가했고, gradlew도 build로 바꿨고, 캐시도 추가해주었다.
name: Test
on:
pull_request:
branches:
- main
paths: ["backend/**"]
push:
branches:
- main
paths: ["backend/**"]
jobs:
test:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./backend
env:
YOUTUBE_API_KEY: ${{secrets.YOUTUBE_API_KEY}}
SPOTIFY_CLIENT_ID: ${{secrets.SPOTIFY_CLIENT_ID}}
SPOTIFY_CLIENT_SECRET: ${{secrets.SPOTIFY_CLIENT_SECRET}}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Cache Gradle packages
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
'프로그래밍 > A music in a balloon' 카테고리의 다른 글
# 10 스프링 예외처리 (1) | 2024.06.06 |
---|---|
# 9 프로젝트 수정 (0) | 2024.06.06 |
# 7 LazyInitializationException을 보았다! (0) | 2024.06.04 |
# 5 게스트 구현 (0) | 2024.05.31 |
# 2 스프링과 재회 (1) | 2024.05.30 |