test16 Spring Boot 3.x Embedded MongoDB Transaction + Replica set Test 1. 소개 스프링 부트와 자바를 사용하고 있고 데이터 베이스는 몽고 디비를 사용하는 곳에서 테스트하기 위한 방법은 저번에 한 번 글로 다룬 적이 있습니다. https://techjisu.tistory.com/180 MongoDB 테스트하기(TestContainer 및 memory DB) 이번에 몽고 디비를 공부하면서 어떻게 테스트할까라는 생각으로 공부하고 글을 작성하게 되었습니다. 기존에는 RDB(MySQL, PostgreSQL)를 사용하면서 hibernate를 사용했으므로 프로덕트 코드는 RDB에 techjisu.tistory.com 여기서 테스트 컨테이너를 사용하면 되지만 도커가 없는 환경에서는 사용할 수 없다는 생각에 mongo-java-server 사용하여 테스트 코드를 작성하였는데요. 테스트 .. 카테고리 없음 2024. 3. 31. MongoDB 테스트하기(TestContainer 및 memory DB) 이번에 몽고 디비를 공부하면서 어떻게 테스트할까라는 생각으로 공부하고 글을 작성하게 되었습니다. 기존에는 RDB(MySQL, PostgreSQL)를 사용하면서 hibernate를 사용했으므로 프로덕트 코드는 RDB에 맞게 사용하면서 테스트 코드는 h2(인메모리 디비)를 사용해 hibernate 설정만 바꿔서 편하게 테스트할 수 있었습니다. 스프링 hibernate를 사용하지 않고 몽고 디비는 nosql이므로 기존의 방식과는 다른 방법으로 테스트를 해야 했다,, 공식적인 Spring 그래서 찾은 방법은 TestContainer와 오픈소스인 memory db를 사용하는 방법이다. 1. de.flapdoodle.embed.mongo https://mvnrepository.com/artifact/de.flapd.. Spring Boot 2024. 1. 8. [Spring Security] @AuthenticationPrincipal 어노테이션 사용하기 https://techjisu.tistory.com/97 저번글과 이어지는 내용입니다. 일반로그인 테스트까지는 성공하였는데 뷰에서 OAuth2로그인을 하여서 모임을 만들려고 하니 PrincipalDetails를 member로 캐스트 할수없다는 에러가나면서안되었습니다. 이제 진짜 어떻게 해야되나..하... 그래서 security를 처음부터 공부하자는 마음으로 전체코드를 처음부터 다시 쭉 보고 있었는데 저번글의 마지막에 썼던내용이 생각났습니다. 스프링 시큐리티는 SecurityContext에 인증된 Authentication 객체를 넣어두고 현재 스레드 내에서 공유되도록 관리하고 있는데요. 그래서 스프링 시큐리티가 가지고 있는 UsernamePasswordAuthenticationToken을 이용하여 어댑터.. Spring Boot/Spring Security 2022. 8. 17. [Spring Security] 스프링 시큐리티 인증객체가 있는 컨트롤러 테스트 하기 요즘에 테스트 코드 짜는 것에 집중하고 있고 많이 공부하고 있습니다. 현재 전에 작업했던 java 8, spring, mybatis, jsp, 했던 프로젝트를 java 11, spring boot, jpa , thymeleaf, security를 사용하여 마이그레이션하고 있습니다. https://github.com/KOSMO-Togather Spring Boot/Spring Security 2022. 8. 16. [Mockito] BDD 스타일 API + BDD 이번 포스팅에선 Mockito가 지원하고 있는 BDD 스타일 API에 대해 알아보겠습니다. 먼저 BDD에 대한 개념부터 알아보고 가겠습니다. BDD (Behavior Driven Development)란? TDD (Test Driven Development)는 "테스트"를 기준으로 하는 개발 방법론입니다. BDD (Behavior Driven Development)는 "행동"을 기준으로 하는 개발 방법론입니다. TDD를 참고했다고 하네요. 위키피디아에 나와있는 BDD 설계 방법입니다. 테스트할 때 Title, Narrative까진 사용하지 않고 Acceptance criteria만 사용합니다. Title An explicit title. Narrative A short introductory sectio.. Spring Boot/Mockito 2022. 8. 7. [Mockito] Verify(검증) 이번 포스팅에선 Mockito를 이용해 스터 빙한 메서드가 제대로 실행이 됐는지 확인해보는 메서드에 대해서 알아보겠습니다. 스터 빙한 메서드를 검증하는 방법 verify 메서드를 이용해서 스터 빙한 메서드가 실행됐는지, n번 실행됐는지, 실행이 초과되지 않았는지 등 다양하게 검증해볼 수 있습니다. verify(T mock, VerificationMode mode) 위와 같은 형태로 쓰며 VerificationMode는 검증할 값을 정의하는 메서드입니다. 메소드명 설명 (테스트 내에서~) times(n) 몇 번이 호출됐는지 검증 never 한 번도 호출되지 않았는지 검증 atLeastOne 최소 한 번은 호출됐는지 검증 atLeast(n) 최소 n 번이 호출됐는지 검증 atMostOnce 최대 한 번이 호.. Spring Boot/Mockito 2022. 8. 7. [Mockito] Mock 객체 Stubbing Mock 객체의 행동이란 리턴 값이 있는 메소드는 모두 Null 을 리턴하고 있다. Optional 타입인 경우 Optional.empty로 리턴 Primitive 타입은 모두 Primitive 값을 따르고 있다. Ex. Boolean인 경우 'false' / Integer 혹은 Long인 경우 0 Collection의 경우 모두 비어있는 Collection을 가지고 있다. Void 메소드의 경우 예외를 던지지 않고 아무 일도 발생하지 않는다. Stubbing이란 Mock 객체의 행동을 조작하는 것을 말한다. Mock객체의 when 메소드를 활용하여 Stubbing을 진행해보자. Ex. 리턴값이 있는 when 메소드 활용 1 StudyService public Study createNewStudy(Lon.. Spring Boot/Mockito 2022. 8. 7. [Mockito] Mockito 시작하기 build.gradle 입니다. 스프링 부트로 프로젝트를 생성하게 되면 spring-boot-starter 의존성을 따라서 기본으로 mockito가 들어오게 됩니다. 스프링부트는 버전을 명시해주지 않으면 최신버전으로 가져오기 떄문에 Junit이 기본으로 들어온것처럼 mockito도 4.5.1 버전으로 의존성이 추가 된것을 확인 할 수 있습니다. 만약 스프링부트로 프로젝트를 하지 않을경우 메이븐 레포지토리에서 찾아서 추가해주면 됩니다. https://mvnrepository.com/search?q=mockito Mock 객체 만들기 MemberService public interface MemberService { Optional findById(Long memberId); } 구현체가 없는 인터페이스 입.. Spring Boot/Mockito 2022. 8. 7. [Mockito] Mockito Mock 이란? Mockito에 대해 설명하기 전에 Mock에 대한 개념부터 설명하겠습니다. Mock은 한글로 "모의, 가짜의" 라는 뜻으로 테스트할 때 필요한 실제 객체와 동일한 모의 객체를 만들어 테스트의 효율성을 높이기 위해 사용합니다. 위키에 정의 된 Mock은 다음과 같습니다.. 모의 객체(Mock Object)란 주로 객체 지향 프로그래밍으로 개발한 프로그램을 테스트할 경우 테스트를 수행할 모듈과 연결되는 외부의 다른 서비스나 모듈들을 실제 사용하는 모듈을 사용하지 않고 실제의 모듈을 "흉내"내는 "가짜" 모듈을 작성하여 테스트의 효용성을 높이는 데 사용하는 객체이다. 사용자 인터페이스(UI)나 데이터베이스 테스트 등과 같이 자동화된 테스트를 수행하기 어려운 때 널리 사용된다. - 위키백과, .. Spring Boot/Mockito 2022. 8. 7. [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. 이전 1 2 다음