main
브랜치에 Pull Request
를 할 때마다 해당 브랜치에 대해 자동으로 Junit 테스트를 수행하도록 하는 설정을 진행해보도록 하자.
간단한 설정을 위하여 Spring 코드는 Rest Controller인 HelloController.java
와 테스트 파일인 ActionApplicationTests.java
단 두 개로 구성하였다.
HelloController.java
package com.bamboo.action;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
@GetMapping("/world")
public String world() {
return "world";
}
}
ActionApplicationTests.java
package com.bamboo.action;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ActionApplicationTests {
@Autowired
HelloController helloController;
@Test
@DisplayName("Get Hello")
void helloTest() {
Assertions.assertThat(helloController.hello()).isEqualTo("hello");
}
@Test
@DisplayName("Get World")
void worldTest() {
Assertions.assertThat(helloController.world()).isEqualTo("");
}
}
두 개의 테스트 중 하나(Get World)는 일부러 실패하도록 구성하였다.
IntelliJ를 통해 테스트를 수행해 보면 하나는 실패하는 것을 확인할 수 있다.
.github/workflows/
경로 아래에 yml
파일로 workflow를 추가한다.
name: Test
on:
pull_request:
branches: [ main ] # main 브랜치에 PR 보낼 때 실행
jobs:
test:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
# JDK Setup
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
# Gradle Wrapper 권한 부여
- name: Grant execute permission for gradlew
run: chmod +x gradlew
# Gradle Test를 실행한다
- name: Test with Gradle
run: ./gradlew --info test
# Test 후 Report 생성
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
junit_files: '**/build/test-results/test/TEST-*.xml'
main
브랜치에 pull request
가 생성될 때를 트리거로 하여 jobs
를 수행하도록 구성하였다.
테스트가 실패하도록 의도된 코드를 feature
브랜치에 push
한 뒤 main
브랜치에 commit
해보면 다음과 같은 결과를 확인할 수 있다.
봇을 통해 pull request
의 코멘트로 테스트 결과를 요약하여 게시해 준다. Details
를 눌러 보면 아래와 같이 어떤 테스트가 실패했고 어떤 로그를 남겼는지도 확인할 수 있다.
Get World 테스트가 실패했다고 알려주고 있다. Raw output
을 눌러 세부 로그를 확인해보자.
이번에는 테스트 코드를 수정하여 테스트가 제대로 통과하도록 한 뒤 push
하여 pull request
를 생성해 보자.
테스트가 통과하였음을 보여주고 있다.