Spring Boot61 [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. [Spring Boot] @Builer @Builer 란 Lombok에서 제공하는 API입니다. 보통 객체를 생성할 때 new를 사용해 객체를 생성하거나 기본 생성자 외에 파라미터를 넘겨주는 경우로 객체를 생성합니다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @Lob private String content; @Builder public Post(String title, String content) { this.title = title; this.content = co.. Spring Boot/어노테이션 2022. 7. 6. [Spring Security] Authentication 인증 Authentication Authentication는 인증을 의미합니다. 스프링 시큐리티는 사용자의 인증정보를 저장하는 토큰 개념으로 사용한다. 인증 시 id와 password를 담고 인증 검증을 위해 전달되어 사용된다. 인증 후 최종 결과 (user 객체, 권한정보)를 담고 SecurirtyContxt에 저장되어 전역적으로 참조가 가능하다. Authentication authentication = SecurityContexHolder.getContext(). getAuthentication() 구조 1) pricipal: 사용자 아이디 혹은 User 객체를 저장 2) credentials : 사용자 비밀번호 3) authorities : 인증된 사용자의 권한 목록 4) details : 인증 부가 정.. Spring Boot/Spring Security 2022. 6. 30. [Spring Securtiy] Spring Security의 Filter Filter Servlet Container의 Filter 서블릿 컨테이너의 Filter는 Dispatch Servlet으로 가기 전에 먼저 적용된다. Filter들은 여러개가 연결되어 있어 Filter chain이라고도 불린다. 모든 Request들은 Filter chain을 거쳐야지 Servlet에 도착하게된다. Spring Security의 Filter Spring Security는 DelegatingFilterProxy 라는 필터를 만들어 메인 Filter Chain에 끼워넣고, 그 아래 다시 SecurityFilterChain 그룹을 등록한다. 그렇게 하며 URL에 따라 적용되는 Filter Chain을 다르게 하는 방법을 사용한다. 어떠한 경우에는 해당 Filter를 무시하고 통과하게 할 수도.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] CSRF CSRF (Cross Site Request Forgery) CSRF 공격은 웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격입니다. 쇼핑몰이 있습니다. 공격자, 사용자(피해자), 서버 이렇게 있습니다. 이때 사용자(피해자)가 로그인 되어있습니다. 공격자가 사용자에게 링크를 보내서 사용자가 클랙한다면 공격자용 홈페이지에 접속하게 됩니다. 예를 들면 공격자용 코드는 다음과 같습니다. 이런식으로 광고같은 거를 누르면 사용자가 공격용 페이지가 열리면서 사용자의 승인 없이 배송지같은게 등록됨으로써 공격이 완료 됩니다. 그래서 스프링 시큐리티는 CsrfFilter라는 필터를 만들어서 이것을 방지.. Spring Boot/Spring Security 2022. 6. 29. 이전 1 2 3 4 5 6 다음