Notice
Recent Posts
Recent Comments
Link
반응형
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 구글 oauth
- CSS
- javaspring
- mybatis
- js
- 마이바티스
- spring
- 자바
- 전자정부 서버세팅
- 처음만나는자바스크립트
- HTML
- 구글캘린더api
- 리액트프로젝트세팅
- 자바스크립트
- 자바스크립트 기초
- react
- Javascript
- 스프링부트
- 자바스크립트기초문법
- 자바스크립트기초
- 기초 코딩
- 리액트세팅
- Spring Boot
- java
- 기초코딩
- 웹앱
- 코딩
- 리액트초기세팅
- 웹
- springboot
Archives
- Today
- Total
인생 디벨로퍼
[0단계] JPA Repository Test 본문
728x90
반응형
1. 초기세팅
- Entity 작성 후 공유 받음.
- data jpa 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
2. 테스트 필수 어노테이션
@DataJpaTest JPA Repository를 테스트하기 위한 애노테이션
@ComponentScan 해당 어노테이션이 위치한 클래스를 시작으로 자동으로 컴포넌트를 스캔하여 Spring Context에 등록
@SpringJUnitConfig 어노테이션이 위치한 클래스나 메소드를 실행할 때 Spring Context를 로드하고 관리
3. BeforeEach 주입
@BeforeEach
public void init() {
setUp("ssar", "role", "1234", "player", null, null, UserStatus.인증대기);
}
private User setUp(String nickname, String email, String password, String role, LocalDateTime createdAt,
LocalDateTime updatedAt, UserStatus status) {
User user = new User();
user.setNickname(nickname);
user.setEmail(email);
user.setPassword(password);
user.setRole(role);
user.setCreatedAt(createdAt);
user.setUpdatedAt(updatedAt);
user.setStatus(status);
return this.entityManager.persist(user);
}
4. select All
@Test
void selectAll() {
List<User> users = userRepository.findAll();
Assertions.assertNotEquals(users.size(), 0);
User user = users.get(0);
Assertions.assertEquals(user.getNickname(), "ssar");
System.out.println("테스트 : " + user.getCreatedAt()); //2023-04-12T15:28:58.868996300
}
5. Select findById / Update
@Test
@Transactional
void selectAndUpdate() {
var optionalUser = this.userRepository.findById(1L);
if (optionalUser.isPresent()) {
var result = optionalUser.get();
Assertions.assertEquals(result.getNickname(), "ssar");
//select -> 1번 유저 select
var nickName = "ssar123";
result.setNickname(nickName);
User merge = entityManager.merge(result);
//merge Nickname 값 Merge
Assertions.assertEquals(merge.getNickname(), "ssar123");
} else {
Assertions.assertNotNull(optionalUser.get());
}
}
optionalUser.isPresent() → optionalUser 안에 값이 존재하는지 확인
merge() → 이미 존재하는 엔티티는 업데이트하고, 존재하지 않는 엔티티는 새로운 엔티티로 인식하여 데이터베이스에 저장
다운캐스팅 해주기
6. Inser / Delete
@Test
void insertAndDelete() {
User user = setUp("love", "love@nate.com", "1234", "player", LocalDateTime.now(), LocalDateTime.now(),
UserStatus.인증대기);
Optional<User> findUser = this.userRepository.findById(user.getId());
//insert
if (findUser.isPresent()) {
var result = findUser.get();
Assertions.assertEquals(result.getNickname(), "love");
//insert 확인
entityManager.remove(user);
//delete
Optional<User> deleteUser = this.userRepository.findById(user.getId());
if (deleteUser.isPresent()) {
Assertions.assertNull(deleteUser.get());
//delete 확인
}
} else {
Assertions.assertNotNull(findUser.get());
}
}
7. BeforeEach 초기화
@Autowired
private EntityManager em;
em.createNativeQuery("ALTER TABLE user_tb ALTER COLUMN ID RESTART WITH 1").executeUpdate();
class 단위 테스트 진행을 위해, 초기화 .
동일 방식으로, 테스트 진행!
728x90
반응형
'Project > Final Project - Sporting (매칭)' 카테고리의 다른 글
[2단계] Admin page Court view (0) | 2023.05.01 |
---|---|
[1단계] Stadium Detail (0) | 2023.05.01 |
[1단계] Company Update Form (0) | 2023.05.01 |
[3단계] sentry.io 적용 (0) | 2023.05.01 |
[1단계] 기업 회원가입 (0) | 2023.04.26 |