1. Junit
- Java 에서 독립된 단위테스트를 지원해주는 프레임워크
- 소프트웨어 테스트 도구로, 작성된 프로그램이 제대로 동작하는지 자동으로 확인해 주는 도구
- [개발자들이 코드를 직접 실행해서 결과를 하나하나 확인할 필요 없이, 미리 만들어둔 테스트 코드를 실행하면 JUnit이 자동으로 "이 코드가 제대로 작동하는지" 알려준다] 정도로 알고있으면 될듯 함
2. Setting (Maven)
2-1. 플러그인 설치
2-2. pom.xml 수정
기존 skiptest true > false로 변경
Junit 의존성
report 관련 플러그인
2-3. 파이프라인 수정
pipeline {
agent any
environment {
registryCredential = 'ncr-token'
imagename = 'gcsc/gcsc-user'
dockerImage = ''
}
tools {
maven 'maven'
jdk 'jdk8'
}
stages {
stage('java version') {
steps {
sh 'java -version'
}
}
……..중략……..
stage('Test') {
// JUnit 테스트 실행
steps {
echo 'Running JUnit tests...'
sh 'mvn test'
}
}
……..중략……..
post {
always {
echo 'Publishing JUnit test results...'
junit '**/target/surefire-reports/*.xml’
// JUnit 테스트 결과 보고
}
}
}
2-4. 테스트 JAVA 파일 생성
경로 : ~/src/test/java/
- 테스트 메소드에 JUnit 어노테이션(@Test)이 누락된 경우 실행되지 않습니다.
- Maven Surefire Plugin은 기본적으로 다음과 같은 규칙에 따라 테스트 클래스를 실행합니다: 클래스 이름이 *Test.java로 끝나야 함.
- 만약 클래스 이름이 이 규칙을 따르지 않으면 해당 테스트 클래스가 실행되지 않습니다.
2-5. 젠킨스 빌드 진행
2-6. Test Stage Log
2-7. 보고서 생성 확인
경로 : /var/lib/jenkins/workspace/project/target/surefire-reports
2-8. 테스트 실패해도 젠킨스 빌드 계속 이어가려면 pom.xml 아래와 같이 수정
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
3. Setting (Gradle)
3-1. build.gradle Dependencies 추가
// JUnit 5 setting
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.8.1’// Spring Test (JUnit 5 Compatible Versions)
testImplementation 'org.springframework:spring-test:5.3.9'
3-2. build.gradle test 추가
test {
useJUnitPlatform()
include '**/JunitTest.class' // JunitTest 클래스만 포함하도록 설정
reports {
junitXml {
destination = file("$buildDir/test-classes/test") // XML 리포트 경로 지정
}
html {
destination = file("$buildDir/reports/tests/test") // HTML 리포트 경로 지정
}
}
}
3-3. Jenkins Pipeline 추가
stage('Junit Run Tests') {
steps {
echo 'Running tests...'
sh 'gradle test'
//sh './gradlew test --tests com.kopis.cloudNative.JunitTest'
}
}
post {
success {
echo 'Build completed successfully!'
}
failure {
echo 'Build failed. Check the logs for details.'
}
always {
junit '**/build/test-classes/test/*.xml'
}
}
3-4. 결과
4. 후기
4-1. 어디다 쓸수 있을까?
1. 새로운 메소드를 추가하거나 클래스를 수정할 때마다 해당 메소드나 클래스의 기능을 검증하는 유닛 테스트를 작성
- 예를 들어, UserService 클래스의 createUser() 메소드가 제대로 동작하는지 단위 테스트를 작성하고 이를 Jenkins가 자동으로 실행하도록 설정
2. 개발자가 새로운 기능을 추가하거나 버그를 수정할 때 기존 기능이 깨지지 않는지 확인하는 데 사용.
- 예를 들어, 기존에 로그인 기능에 대한 JUnit 테스트가 있다면, 새로운 기능을 추가할 때마다 로그인 기능이 정상적으로 작동하는지 자동으로 확인
3. 외부 목적지 API에 대한 OPEN만을 확인
4-2. 어디엔 못쓸까?
- 외부API 호출 or DB 연동 테스트 불가
- 테스트가 빌드 전에 이루어지기 때문에 테스트 주체가 WAS가 아닌 젠킨스에서 이루어짐
- 해당 테스트들은 빌드 후 통합테스트에서 이루어져야함
4-3. 문제가 뭘까?
결국엔 개발사에서 테스트를 위한 코드를 다시 생성해야함