일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- UE4
- 스파르타내일배움캠프TIL
- Inventory
- Unity3d
- 스파르타내일배움캠프
- Unity2D
- 구현
- Photon
- 언리얼엔진
- 스택
- Unity
- 유클리드호제법
- FSM
- 내일배움캠프
- 포톤
- UnrealEngine
- unityui
- 이분탐색
- BFS
- 프로그래머스
- c#
- QueryDSL
- 워크플로
- 유니티
- C++
- Firebase
- 문자열
- 순열
- 알고리즘
- 해시
Archives
- Today
- Total
개발 낙서장
[Spring] @DataJpaTest 사용 시 UnsatisfiedDependencyException 발생 본문
@DataJpaTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
User user;
@Test
@Order(1)
@DisplayName("유저 생성")
void createUser() {
String username = "abc123";
String password = "abc123";
UserRoleEnum role = UserRoleEnum.USER;
User createdUser = userRepository.save(new User(username, password, role));
assertNotNull(createdUser.getId());
assertEquals(username, createdUser.getUsername());
assertEquals(password, createdUser.getPassword());
assertEquals(role, createdUser.getRole());
user = createdUser;
}
}
@DataJpaTest를 사용해 Repository 테스트를 하려던 중에 에러가 발생했다.
음... 뭐라는 거지...🤨
구글링을 해보니 원인은 @DataJpaTest
에게 있었다.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@BootstrapWith(DataJpaTestContextBootstrapper.class)
@ExtendWith({SpringExtension.class})
@OverrideAutoConfiguration(
enabled = false
)
@TypeExcludeFilters({DataJpaTypeExcludeFilter.class})
@Transactional
@AutoConfigureCache
@AutoConfigureDataJpa
@AutoConfigureTestDatabase
@AutoConfigureTestEntityManager
@ImportAutoConfiguration
public @interface DataJpaTest {
String[] properties() default {};
@PropertyMapping("spring.jpa.show-sql")
boolean showSql() default true;
@PropertyMapping("spring.data.jpa.repositories.bootstrap-mode")
BootstrapMode bootstrapMode() default BootstrapMode.DEFAULT;
boolean useDefaultFilters() default true;
ComponentScan.Filter[] includeFilters() default {};
ComponentScan.Filter[] excludeFilters() default {};
@AliasFor(
annotation = ImportAutoConfiguration.class,
attribute = "exclude"
)
Class<?>[] excludeAutoConfiguration() default {};
}
DataJpaTest 어노테이션의 구조이다. 여기에 달려있는 어노테이션을 보면 수상한 어노테이션이 하나 있는데
@AutoConfigureTestDatabase
이름만 봐도 알 수 있듯이 자동으로 테스트용 DB를 구성해준다는 의미라고 한다.
(정확하진 않지만 내장된 메모리 DB로 테스트를 한다는 뜻?)
근데 나는 MySql로 DB를 구성해 테스트를 하려고 했기 때문에 설정이 맞지 않아 에러가 발생했던 것이다.
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
해당 어노테이션을 테스트 클래스 상단에 달아서 해당 설정을 무효화해주면 내가 설정한 DB대로 잘 실행이 된다.
'Java' 카테고리의 다른 글
[Spring] QueryDSL 페이징 (0) | 2024.03.12 |
---|---|
Name 필드 네이밍에 대한 고찰 (0) | 2024.03.05 |
단위 테스트 (1) | 2024.02.16 |
[Spring] DTO와 Entity (0) | 2024.02.15 |
데이터베이스(DB, DataBase) (0) | 2024.02.13 |
Comments