Spring Boot/JUnit59 [JUnit5] 마이그레이션 기본적으로 스프링 부트로 프로젝트를 만들면 spring boot-starter-test 에 JUnit5 가 포함되어 있고 junit-vintage-engine은 빠져있습니다. 지금은 공부를 하고 있으니깐 추가해줍니다. // https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine testImplementation group: 'org.junit.vintage', name: 'junit-vintage-engine' 이러면 jupiter가 아닌 그냥 junit @Test 어노테이션이 생깁니다. package me.jisu.javatest; import org.junit.Before; import org.junit.Test; publi.. Spring Boot/JUnit5 2022. 7. 22. [JUnit5] JUnit 5: 확장 모델 JUnit 4의 확장 모델은 @RunWith(Runner), TestRule, MethodRule 이 있는데 JUnit 5의 확장 모델은 단 하나, Extension 이다. 등록방법에는 3가지가 있다. 등록 방법 선언적인 등록 @ExtendWith 프로그래밍 등록 @RegisterExtension 자동 등록 자바 ServiceLoader 이용 @ExtendWith package me.jisu.javatest; import jdk.jfr.Threshold; import org.junit.jupiter.api.extension.AfterTestExecutionCallback; import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; import.. Spring Boot/JUnit5 2022. 7. 22. [Junit5] junit-platform.properties 위와 같이 test/resources/ 밑의 파일을 만들어 주면된다. junit.jupiter.testinstance.lifecycle.default = per_class junit.jupiter.conditions.deactivate = org.junit.*DisabledCondition junit.jupiter.displayname.generator.default = \ org.junit.jupiter.api.DisplayNameGenerator$ReplaceUnderscores junit.jupiter.testinstance.lifecycle.default = per_class 인스턴스를 하나로 공유하겠다. junit.jupiter.conditions.deactivate = org.junit.*Di.. Spring Boot/JUnit5 2022. 7. 22. [JUnit5] 테스트 순서 테스트의 순서는 정해져 있지 않습니다. 하지만 작성한 순서대로 결과 값이 뜨기 떄문에 순서가 적은 순서대로 나오는것처럼 보이는데 이것을 믿고 작성한 순서대로 테스트가 실행된다! 이렇게 믿으면 안됩니다. 왜냐하면 저번글에 작성했던 테스트 클래스의 인스턴스는 기본전략이 테스트메소드마다 생성하기때문에 그런데요. 이것의 이유가 의존성을 낮추고 다른 테스트의 영향을 안 미치게 하기위해서, 즉 각각의 테스트 메소드는 독립적으로 실행되어야 테스트가 잘되는지 알수있기 때문입니다. 하지만 내가 원하는 순서대로 테스트를 작성하고 싶을 때도 있습니다. 시라니오 테스트, 회원가입을 하고 로그인을하고 글을작성하고 닉네임을 변경하고 등등 유스케이스를 테스트하는경우 이 모든 것들이 스테이트 풀하고 상태정보가 유지되게 데이터를 공유.. Spring Boot/JUnit5 2022. 7. 22. [JUnit5] 테스트 인스턴스 @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) class StudyTest { int value = 1; @FastTest @Test @DisplayName("스터디 만들기 ╯°□°)╯ fast") void create_new_study() { System.out.println(value++); Study actual = new Study(10); assertEquals(actual.getLimit(), 10); assertThat(actual.getLimit()).isGreaterThan(0); } @SlowTest @DisplayName("스터디 만들기 \uD83D\uDe31 slow") @Test void create_n.. Spring Boot/JUnit5 2022. 7. 22. [JUint5] 테스트 반복하기 @RepeatedTest @RepeatedTest(10) void repeatTest() { System.out.println("test"); } @RepeatedTest(10)을 하면 10번 테스트를 반복할 수 있다. 반복 횟수 가져오기 @RepeatedTest(10) void repeatTest(RepetitionInfo repetitionInfo) { System.out.println("test" + repetitionInfo.getCurrentRepetition() + "/"+ repetitionInfo.getTotalRepetitions()); } RepetitionInfo를 인자로 받아서 횟수를 알 수 있다. repetitionInfo.getCurrentRepetition() : 현재 몇번째인.. Spring Boot/JUnit5 2022. 7. 22. [JUnit5] Assumptions Assumptions Assumption 구문은 테스트 메서드가 특정한 조건에 대해서 실행하고자 할 때 사용하는 구문입니다. JUnit5에서는 org.junit.jupiter.api.assumptions 패키지의 내용물로 사용할 수 있습니다. assumeTrue 메서드는 파라미터의 값이 true일때 테스트를 계속 진행하겠다라는 의미입니다. 예를들어 특정한 OS, JAVA 버전, 환경변수에 따라 이러한 값에 따라 실행되어야한다. 실행되지 않아야 한다. 이런식으로 활용 할 수 있습니다. 저는 환경변수를 통해 테스트를 진행하였습니다. 이런식으로 환경변수를 하나 잡아줍니다. 그리고 인텔리제이를 껏다켜야합니다. 인텔리제이는 기본적으로 실행당시에 환경변수들을 읽어오기때문에 재부팅하지 않으면 인식하지 못할 수 도 있.. Spring Boot/JUnit5 2022. 7. 21. [JUnit5] Assertion assertEquals study public class Study { private StudyStatus studyStatus = StudyStatus.DRAFT; private int limit; public StudyStatus getStatus() { return this.studyStatus; } } StudyTest class StudyTest { @Test @DisplayName("스터디 만들기 ╯°□°)╯") void create_new_study() { Study study = new Study(-10); assertNotNull(study); //기대 값 왼쪽 나오는 값 오른 쪽이긴하나 상관없다. assertEquals(StudyStatus.DRAFT, study.getStatus(),.. Spring Boot/JUnit5 2022. 7. 21. [JUnit 5] JUit5 테스트 코드 테스트 코드의 중요성 개발단계 초기의 문제 발견을 도와줍니다. 개발자가 나중에 코드를 리팩터링 하거나, 기존 기능을 업그레이드하는 과정에 올바르게 작동하는지 확인할 수 있습니다. 기능의 불확실성을 감소할 수 있습니다. 시스템에 대한 실제 문서를 제공합니다. 즉, 단위 테스트 자체가 문서로 사용할 수 있습니다. 테스트 코드 적용 후 느낀 첫 번째 : 빠른 피드백 및 자동 검증 기존의 개발 방식은 다음과 같았다고 합니다. 코드 작성 서버(Tomcat, 내장 서버) 실행 API 테스트 도구(Postman)로 HTTP 요청 및 응답을 눈으로 확인 결과가 다르면 서버 중지 후 코드 수정 여기서 매번 코드를 수정할 때마다 2번~4번을 반복했다고 합니다. (이건 저도 똑같네요ㅎㅎ) 따라서, 매번 서버를 .. Spring Boot/JUnit5 2022. 7. 21. 이전 1 다음