본문 바로가기
웹개발

quenswer(프로젝트)-Junit Test(Question)

by nyeongha 2023. 12. 29.

데이터베이스 테이블에 접근하는 메서드들이 잘 작동되는지 Test하려고 합니다.

 

src/test/폴더안에있는 미리 생성되어있는 test파일에 들어갑니다.

클래스 내부에 @Autowired애너테이션을 사용해 스프링이 자동으로 questionRepository생성(의존성 주입)해줍니다.

개발자가 아닌(클래스를 new를 사용하여 객체를 주입하는 것이 아닌) 스프링이 의존성을 주입(DI:dependancy injection)해주는것(@Autowired나 생성자를 사용하여 주입받음)을 제어의 역전(IoC)라고도 합니다.두가지가 스프링의 제일 큰 특징이자 장점입니다.
@Autowired
private QuestionRepository questionRepository;

 

잘 생성되는지 테스트하기 위해 void create()를 만들어줍니다.

테스트하는 함수에는 꼭 @Test에너테이션을 붙여줍니다.

@Test
void create() {
    Question q1=new Question();
    q1.setSubject("2000번 문제 해결해주세요");
    q1.setContent("코드 로직에 무슨 문제가 있는지 확인해주세요,,,문제를 잘모르겠습니다.");
    q1.setCreateDate(LocalDateTime.now());
    this.questionRepository.save(q1);
}

기존에 스프링이 실행되고있다면 꺼주시고 테스트를 진행합니다.

잘 실행이 되면 아래와같이 통과가 뜹니다.

스프링을 다시실행시켜h2콘솔로 가서 확인해보겠습니다.

이전테스트로 1,2번 행을 생성한뒤 1번아이디에 해당하는 데이터를 삭제하였기 때문에 2번 객체만 남아있었기 때문에

create함수를 통해 추가된 데이터는 id가 3번입니다.

 

그럼 삭제를 test해보겠습니다.

@Test
void delete(){
    Optional<Question> oq=questionRepository.findById(2);	#id가 2번인 데이터를 찾아서 oq에 담아줍니다.
    oq.ifPresent(a -> questionRepository.delete((a)));	#oq객체가 존재하면 oq의 요소를 삭제한다.
    Long Lq=questionRepository.count();	#Lq에 questionRepository의 튜플수를 담아
    assertEquals(1,Lq);	#1과 Lq값이 같은지 비교한다.
}

아래와같이 test가 통과되었습니다.

그러면 스프링을 재실행해서 h2-console에서 실제로 삭제되었는지 확인해봅시다.

잘 삭제된것을 확인해볼수있습니다.

 

검색 test를 해보기 위해 두개의 데이터를 추가해줍니다.

@Test
void create() {
    Question q2=new Question();
    q2.setSubject("2000번 문제 해결팁좀 알려주세요");
    q2.setContent("코드 로직에 무슨 문제가 있는지 확인해주세요,,,문제를 잘모르겠어요");
    q2.setCreateDate(LocalDateTime.now());
    this.questionRepository.save(q2);

    Question q3=new Question();
    q3.setSubject("4500번 문제 해결해주세요");
    q3.setContent("코드 로직에 무슨 문제가 있는지 확인해주세요,,,문제를 잘모르겠습니다.");
    q3.setCreateDate(LocalDateTime.now());
    this.questionRepository.save(q3);

}

데이터가 잘 생성되었습니다.

subject에 특정문자를 포함하는 함수를 questionRepository에서 지원해주지않기때문에 questionRepository에 추가해줍니다.

@Repository
public interface QuestionRepository extends JpaRepository<Question,Integer> {
    List<Question> findBySubjectLike(String subject);	#이부분 추가

}

 

그런다음 검색기능을 테스트해보겠습니다.

subject에서 "2000번"을 포함하는 데이터를 찾아서 Lq에 담아줍니다.데이터베이스에는 2개가 있습니다.

assertEquals를 통해 Lq의 리스트 길이와 2가 같은지 테스트합니다.

이제 검색테스트를 해보겠습니다.마찬가지로 스프링이 실행되어있다면 꺼주시고 진행해주세요

@Test
void search(){
    List<Question> Lq=questionRepository.findBySubjectLike("%2000번%");
    assertEquals(2,Lq.size());
}

테스트가 통과했습니다.

'웹개발' 카테고리의 다른 글

quenswer(프로젝트)-QuestionList  (0) 2024.01.08
quenswer(프로젝트)-Junit Test(Answer)  (0) 2023.12.29
quenswer(프로젝트)-entity설계  (4) 2023.12.29
자바 서블릿  (1) 2023.12.26
웹 크롤링  (0) 2023.12.22