일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- java
- 파일
- vision document
- 소켓
- FIle
- analysis
- srs
- IO
- mindmap
- 데이터베이스
- 자바
- Eclipse
- 설정
- network
- 클래스
- 이클립스 설정
- 제안서
- Ecilpse
- custom Tag
- 메소드
- 네크워크
- jdk설치
- jdbc
- js꼬리
- 게시판
- 게시판 제작
- sequence diagram
- Database
- System Requirement Specification
- workspace
- Today
- Total
공적's life
Spring boot test 전략 - Entity Test 본문
Spring boot에서 Entity를 테스트 하기 위해서는 아래와 같은 설정을 필요로 합니다.
@RunWith(SpringRunner.class)
@DataJpaTest
@RunWith 이건 설명을 생략하고
@DataJpaTest 어노테이션에 대해서 간략히 설명하면
@Transactional
@AutoConfigureCache
@AutoConfigureDataJpa
@AutoConfigureTestDatabase
@AutoConfigureTestEntityManager
@DataJpaTest은 어노테이션을 가지고 있습니다.
AutoConfigure가 붙어 있는 어노테이션은 "META-INF/spring.factories" 에서 클래스를 가져와서 생성됩니다.
@AutoConfigureDataJpa 이 어노테이션은 JpaRepository를 사용하게 해주고
@AutoConfigureTestDatabase는 classloader에서 로딩된 클래스를 판단하여 아래 DB를 사용하게 해줍니다.
- H2 Database
- Derby Database
- HSQL Database
@AutoConfigureTestEntityManager는 TestEntityManager는 사용 하게 해줍니다.
작성한 Entity class는 아래와 같습니다.
@Entity
@Getter
@NoArgsConstructor
public class Board {
@Id @GeneratedValue
private Long id;
private String subject;
private String content;
private int readCount;
public Board(String subject, String content){
Assert.hasLength(subject, "Subject must not be empty");
this.subject = subject;
this.content = content;
this.readCount = 0;
}
}
위 Entity는 subject만 필수로 넣어야 하고 나머지는 필수값이 아닙니다.
그럼 이제 남은 문제는 어떤것을 테스트 해야 하는가?
일단 제가 생각한것은 2가지 입니다.
첫번째로는 Exception Case 입니다.
Exception Case는 위 설정이 없더라도 충분히 테스트 가능하겠죠?
두번째로는 저장이 잘되는지 입니다.
이것은 TestEntityManager를 활용하면 충분히 테스트 가능하겠죠?
아래 코드는 위 Case를 바탕으로 작성한 코드 입니다.
@RunWith(SpringRunner.class)
@DataJpaTest
public class BoardTest {
@Autowired
private TestEntityManager entityManager;
@Test
public void createWhenSubjectIsNullShouldThrowException() {
assertThatIllegalArgumentException().isThrownBy(() -> new Board(null, "content"))
.withMessage("Subject must not be empty");
}
@Test
public void createWhenSubjectIsEmptyShouldThrowException() {
assertThatIllegalArgumentException().isThrownBy(() -> new Board("", "content"))
.withMessage("Subject must not be empty");
}
@Test
public void saveShouldPersistData() {
Board board = this.entityManager.persistFlushFind(new Board("subject", "content"));
assertThat(board.getSubject()).isEqualTo("subject");
assertThat(board.getContent()).isEqualTo("content");
}
}
그럼 다음에는 Repository 테스트 전략을 작성해보겠습니다.
'Programing' 카테고리의 다른 글
JPA - Persistence Context (0) | 2019.04.04 |
---|---|
custom Tag 만들기 - TagSupport 이용하여 js 꼬리표 붙이기 (0) | 2015.04.26 |
모바일 브라우저에서 포커스 안보이게 하기 (0) | 2014.05.12 |
크롬에서 drag and drop으로 파일 다운로드 만들기 (0) | 2014.05.12 |
ehcache 적용하기 (0) | 2012.06.01 |