본문 바로가기

SpringBoot/테스트코드8

JUnit5에서 의존성 주입은 @Autowired로 해야하는 이유

의존성을 주입받는 방식에는 4가지의 방법이 일반적으로 알려져 있습니다. 1. 생성자를 통해서 의존성을 주입 2. 필드를 통해서 의존성을 주입 3. setter를 통해서 의존성을 주입 4. lombok의 @RequiredArgsConstructor로 final이나 @NonNull의 필드를 의존성 주입 저는 주로 lombok의 @RequiredArgsConstructor를 통해서 final타입의 필드를 통해서 의존성을 주입받는 방법을 사용하고 있었습니다. 그런데, JUnit5으로 단위테스트를 작성하면서 lombok의 방식으로 DI를 시도했으나 의존성 주입에서 에러가 발생했습니다. 생성자를 통해서 DI하는 것도 에러가 발생했습니다. 자세히 상황을 말하자면, MockMvc를 주입받으려고 하자 에러가 발생했습니다.. 2020. 9. 10.

단위테스트에서 여러 properties 중 한 개만 지정하기

안녕하세요. 지금까지 인강을 통해서 만들어온 프로젝트를 복습할 겸, 이것저것 소스도 둘러보고, 웹앱도 잘 동작하는지 테스트도 하고, 그리고 단위 테스트도 전부 돌려보는 시간을 가졌습니다. 그런데... 단위 테스트에 엄청난 오류가 발생하고 있었습니다. 에러 메시지 java.lang.IllegalStateException: Unable to create SecurityContext using @com.studyolle.WithAccount(value="devkis") Caused by: org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["PUBLIC.UK_Q0UJA.. 2020. 8. 22.

단위테스트에서 FK관계에서 발생한 DataIntegrityViolationException 에러

안녕하세요. 단위테스트에서 또 오류가 발생해서 해결방법을 공유해보고자 합니다. 이번 오류는 정말 중요한 개념이 있는 오류였습니다.. 이 개념을 혼자 공부할 때 알게된 걸 천만다행으로 생각합니다. 에러 원인은 Foreign Key로 다른 테이블로부터 참조를 당하고 있는 계정 테이블의 데이터를 삭제하려고 하니 발생하는 문제였습니다. 사용 중인 기술 스택 스프링부트 JUnit5 인메모리 디비(h2) Spring data JPA 에러가 발생하는 단위테스트 클래스에서는 멤버 메서드가 실행될 때마다, 매번 계정을 새로 인메모리 디비에 저장하고 로그인이 된 상태로 맴보 메서드가 수행이 되고, 메서드 동작이 종료되면 @AfterEach 메서드로 계정정보를 날리도록 만들어져 있습니다. 여기서 문제가 발생하는 부분은 메서.. 2020. 8. 20.

[Springboot 단위테스트]MockMvc Bean을 주입받지 못하는 에러

에러내용. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.studyolle.settings.profileTest': Unsatisfied dependency expressed through field 'mockMvc'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.test.web.servlet.MockMvc' available: expected at least 1 bean which.. 2020. 7. 26.

JUnit4와 JUnit5의 차이점.

안녕하세요. 요즘 강의를 보면서 모르는 것과 공부하면서 생기는 의문점이 많이 생깁니다. 이번 글에서 알아볼 내용은 JUnit4와 JUnit5의 차이점 중 하나입니다. 각 테스트 코드마다 공통적으로 들어가는 코드를 미리 실행시켜주는 어노테이션과 테스트가 끝난 후에 공통적으로 실행시켜주는 어노테이션이 버전이 달라지면서 선언하는 어노테이션이 달라져서 이 차이점을 공부해 보았습니다. 결론. JUnit4 JUnit5 @Before @BeforeClass @After @BeforeEach @BeforeAll @AfterEach Public void ... 접근제어자 public기본으로 사용. void ... 접근제어자 Default로 사용. JUnit4 일단, JUnit4부터 알아보겠습니다. 참고 문서 @Befor.. 2020. 7. 19.

[SecurityTest]로그인 인증 테스트 방법

안녕하세요. Spring-Security를 사용해서 로그인 인증 기능에 대한 테스트 방법에 대해서 알아보고자 합니다. 테스트 환경 - JUnit4 - MockMvc를 빈으로 주입받아 mock 테스트를 했습니다. - 사전에 회원가입에 대한 테스트 코드가 필요합니다. 테스트코드에서 로그인 인증에 사용할 주요 메서드 import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated; authenticated() authenticated()를 사용해서 테스트하면, Security를 통해서 로그인만 되면, 해당 테스트 코드는 통과됩니다. import static org.sprin.. 2020. 7. 19.

[JUnit4-5]JUnit 버전에 따른 어노테이션 사용법

테스트 결과 JUnit4버전으로 테스트한 결과입니다. 에러 정상 작동 테스트 소스에서 어노테이션 설정을 잘못해서 에러가 발생했습니다. 그 이유를 분석해보려고 합니다. 오류가 생긴 이유 첫번째. 공식 문서를 확인한 결과 JUnit버전에 따른 사용 방법의 문제였습니다. https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testing Spring Boot Features Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and wi.. 2020. 7. 11.

[JUnit]MVC 테스트 어노테이션 알아보기

@SpringBootTest 설명 springboot에서 제공하는 어노테이션입니다. SpringApplication의 테스트를 할 때 사용합니다. @SpringBootTest Option 1. MOCK(Default) @AutoConfigureMockMvc나 @AutoConfigureWebTestClient와 함께 사용할 수 있다고 합니다. mock web 환경이 제공되며, springboot 내장 톰켓 서버를 실행하지 않고 테스트를 할 수 있게됩니다. 2. RANDOM_PORT WebServerApplicationContext를 다운받아 실제 웹 환경을 제공하는 옵션입니다. 내장 톰켓 서버가 8080이 아닌 랜덤포트로 시작됩니다. 3. DEFINED_PORT WebServerApplicationCont.. 2020. 7. 5.