티스토리 뷰
위의 이미지처럼 Gradle -> Tasks -> verification -> test를 클릭하면 전체 테스트를 수행할 수 있다.
시큐리티 적용으로 인하여 인증된 사용자만이 API를 호출할 수 있게 변경되었기 때문에, 모든 테스트가 통과하지 못하고 있다.
No qualifying bean of type~ 메시지를 발견할 수 있는데, 소셜 로그인 관련 설정값이 없기 때문에 발생한다.
src/main 환경과 src/test 환경은 각자의 환경 구성을 가진다.
test에 application.properties가 없으면 main의 설정을 그래도 가져오지만, application-oauth.properties는 가져오지 않는다.
이를 해결하기 위해서 test를 위해서 가짜 설정값으로 application.properties를 만들어야 한다.
spring.jpa.show_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.h2.console.enabled=true
spring.session.store-type=jdbc
# Test OAuth
spring.security.oauth2.client.registration.google.client-id=test
spring.security.oauth2.client.registration.google.client-secret=test
spring.security.oauth2.client.registration.google.scope=profile,email
위와 같은 방식으로 가짜 설정값을 넣은 application.properties를 생성하였다.
이렇게 하면 실패한 테스트 케이스가 줄어든 것을 확인할 수 있다.
다른 테스트는 200(정상 응답)대신 302(리다이렉션 응답)이 와서 실패했다.
스프링 시큐리티 설정으로 인증되지 않은 사용자의 요청은 이동시켰기 때문이다.
이는 임의의 인증된 사용자를 추가하면 된다.
testCompile('org.springframework.security:spring-security-test')
위의 testCompile~을 build.gradle의 dependencies에 추가한다.
그리고 gradle을 새로고침 해줘야 한다!
spring-security-test는 스프링 시큐리티 테스트를 위한 여러 도구들을 지원한다.
@WithMockUser 어노테이션을 사용하여 테스트를 위한 사용자를 만들어서 사용하면 된다.
@WithMockUser 어노테이션은 MockMvc에서만 작동하기 때문에, @SpringBootTest에서 MockMvc를 사용할 수 있게 변경해야 한다.
@Before 어노테이션을 사용해서 테스트가 시작되기 전에 MockMvc 인스턴스를 생성할 수 있게 변경한다.
mvc.perform을 사용해서 MockMvc를 통해 테스트를 하면 된다.
얘는 @WebMvcTest가 CustomOAuth2UserService를 스캔하지 않아서 발생하였다.
@WebMvcTest가 스캔하는 대상
- WebSecurityConfigurerAdapter
- WebMvcConfigurer
- @ContorollerAdvice
- @Controller
따라서 스캔할 수 없는 대상을 제거한다.
@WebMvcTest(controllers = HelloController.class,
excludeFilters = {
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = SecurityConfig.class)
}
)
@EnableJpaAuditing으로 인하여 발생하였다. @EnableJpaAuditing을 사용하기 위해서는 최소 하나의 @Entity 클래스가 필요하다.
@SpringBootApplication과 @EnableJpaAuditing을 다른 클래스로 분리한다.
@Configuration
@EnableJpaAuditing
public class JpaConfig {
}
위의 코드와 같이 다른 클래스를 생성해주면 된다.
- Total
- Today
- Yesterday
- github
- python3
- graphql
- postman
- hashcode
- go 특징
- git
- java
- 코틀린
- pm.test
- 코딩테스트
- solidity
- 1차 인터뷰
- pm.expect
- 확장 함수
- Kotlin In Action
- postman tests
- postman collection
- Kotlin
- string
- 네이버 2022 공채
- Python
- DGS Framework
- mysql
- squash merge
- downTo
- Squash and merge
- 주생성자
- 2차 인터뷰
- Basic Type
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |