import static org.junit.jupiter.api.Assertions.assertEquals;
...중략
@Test
void testJpa() {
List<Question> all = this.questionRepository.findAll();
assertEquals(2, all.size());
Question q = all.get(0);
assertEquals("sbb가 무엇인가요?", q.getSubject());
}
// src/test/java/com.mysite.sbb
import java.time.LocalDateTime;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SbbApplicationTests {
@Autowired
private QuestionRepository questionRepository;
@Test
void testJpa() {
Question q1 = new Question();
q1.setSubject("sbb가 무엇인가요?");
q1.setContent("sbb에 대해서 알고 싶습니다.");
q1.setCreateDate(LocalDateTime.now());
this.questionRepository.save(q1); // 첫번째 질문 저장
Question q2 = new Question();
q2.setSubject("스프링부트 모델 질문입니다.");
q2.setContent("id는 자동으로 생성되나요?");
q2.setCreateDate(LocalDateTime.now());
this.questionRepository.save(q2); // 두번째 질문 저장
}
}
@SpringBootTest: 테스트 클래스임을 나타낸다.
@Autowired: 스프링이 객체를 대신 생성하여 주입한다. @Autowired 애너테이션을 해당 변수에 적용하면 스프링 부트가 questionRepository 객체를 자동으로 만들어 주입
@Tests: 메서드가 테스트 메서드임을 나타낸다.
import static org.junit.jupiter.api.Assertions.assertEquals;
// ...중략
@Test
void testJpa() {
List<Question> all = this.questionRepository.findAll();
assertEquals(2, all.size());
Question q = all.get(0);
assertEquals("sbb가 무엇인가요?", q.getSubject());
}
assertEquals(기대값, 실제값): JUnit의 메서드, 예상한 결과와 실제 결과가 동일한지를 확인
assertTrue(oq.isPresent());
assertTrue(): 괄호 안의 값이 true(참) 인지를 테스트, false를 리턴하면 오류가 발생하고 테스트가 종료
@Transactional: 메서드가 종료될 때까지 DB 세션이 유지
import org.springframework.transaction.annotation.Transactional;
@SpringBootTest
class SbbApplicationTests {
@Autowired
private QuestionRepository questionRepository;
// @Transactional
@Test
void testJpa() {
Optional<Question> oq = this.questionRepository.findById(2);
assertTrue(oq.isPresent());
Question q = oq.get();
List<Answer> answerList = q.getAnswerList();
assertEquals(1, answerList.size());
assertEquals("네 자동으로 생성됩니다.", answerList.get(0).getContent());
}
}
@Transactional 애너테이션이 없다면, findById 메서드를 통해 Question 객체를 조회하고 나면 DB 세션이 끊어지기 때문에 오류가 발생한다.
'Java > Spring Boot' 카테고리의 다른 글
| [Spring Boot] email 전송하기 (2) | 2025.01.29 |
|---|---|
| [SpringBoot] Thymeleaf (1) | 2024.12.25 |
| [SpringBoot] H2database, JPA 설정과 사용법 (4) | 2024.12.22 |
| [SpringBoot] Annotation (0) | 2024.12.22 |
| [SpringBoot] 기본 파일 (2) | 2024.12.22 |