①Junit 에 대해서 공부하자.! Junit BookRepositoryTest
1일본에서 일하는 외노자 로써 내용이 일본어가 포함될 수 있습니다.!!
하기에 동영상 참조 하였습니다. (문제가 될 시 삭제하겠습니다.)
https://www.youtube.com/watch?v=kYqGAM2culU&list=PL93mKxaRDidEZfpXoyWZ-2ZLsYrQByDMP
Junit에 공부하기 위해서 이런저런 찾다가 유튜브에서 좋은 메타코딩 이라고 하는 강의를 해주시는 분을 보고
공부를 진행하고 있습니다. 이런저런 내용을 보고 복습을 하기 위해서
내용을 적습니다.
나름대로의 해석,, 일 수도 있어서 생각과 다른 점은 알려주시길 바랍니다.
하기에 코드를 하나하나 풀어 갈 생각입니다.
본 코드는 따로 게시물을 생성하도록 하겠습니다.
1. 전체코드
package com.junitP.junit.domain;
import static org.junit.jupiter.api.Assertions.*;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.jdbc.Sql;
@DataJpaTest //DB 関連のみテスト
public class BookRepositoryTest {
@Autowired
private BookRepository bookRepository;
// @BeforeAll //テスト以前一回実行
@BeforeEach //各テスト以前に実行
public void dataSetting() {
String title = "junit";
String author = "coding";
Book book = Book.builder()
.title(title)
.author(author)
.build();
bookRepository.save(book);
}
// 1. book 登録テスト
@Test
public void book_登録() {
//given (データの準備)
String title = "new_junit";
String author = "new_coding";
Book book = Book.builder()
.title(title)
.author(author)
.build();
//when (テスト実行)
Book bookPS = bookRepository.save(book);
//then (検証)
assertEquals(title, bookPS.getTitle());
assertEquals(author, bookPS.getAuthor());
// System.out.println(bookPS.getTitle());
}
// 2. book リスト
@Test
public void bookList_test() {
//given
String title = "junit";
String author = "coding";
//when
List<Book> booksPS = bookRepository.findAll();
//then
assertEquals(title , booksPS.get(0).getTitle());
assertEquals(author, booksPS.get(0).getAuthor());
}
// 3. book 詳細画面
@Sql("classpath:db/tableInit.sql")
@Test
public void bookSearch_test() {
//given
String title = "junit";
String author = "coding";
//when
Book bookPS = bookRepository.findById(1L).get();
//then
assertEquals(title, bookPS.getTitle());
assertEquals(author, bookPS.getAuthor());
// System.out.println(bookPS.getTitle());
}
// 4. book 削除
@Sql("classpath:db/tableInit.sql")
@Test
public void book_delete_test() {
//given
Long id = 1L;
//when
bookRepository.deleteById(id);
//then
// Optional<Book> bookPS = bookRepository.findById(id);
assertFalse(bookRepository.findById(id).isPresent());
}
// 5. book 修正
@Sql("classpath:db/tableInit.sql")
@Test
public void book_修正_test() {
//given
Long id = 1L;
String title = "new_junit";
String author = "new_coding";
Book book = new Book(id, title, author);
//when
// bookRepository.findAll().stream()
// .forEach((b) -> {
// System.out.println(b.getId());
// System.out.println(b.getTitle());
// System.out.println(b.getAuthor());
// System.out.println("--------------------------------------");
// });
Book bookPS = bookRepository.save(book);
// System.out.println(bookPS.getId());
// System.out.println(bookPS.getTitle());
// System.out.println(bookPS.getAuthor());
// System.out.println("--------------------------------------");
// System.out.println(bookPS.getTitle());
//then
assertEquals(id, bookPS.getId());
assertEquals(title, bookPS.getTitle());
assertEquals(author, bookPS.getAuthor());
}
}
전체코드
BookRepositoryTest
@DataJpaTest //DB 関連のみテスト
public class BookRepositoryTest {
@Autowired
private BookRepository bookRepository;
// @BeforeAll //テスト以前一回実行
@BeforeEach //各テスト以前に実行
public void dataSetting() {
String title = "junit";
String author = "coding";
Book book = Book.builder()
.title(title)
.author(author)
.build();
bookRepository.save(book);
}
배경으로 지금 Book에는 id, title, author가 있다.
@DataJpaTest
- 기본적으로 인메모리 DB인 H2를 기반으로 Test용으로 DB를 구축하며, 테스트가 끝나면 트랜잭션 롤백을해준다.
@Autowired
- Spring 관리하의 객체 중에서 적절한 것을 변수에 자동으로 설정하도록 하기 때문에 인스턴스 변수에 붙이는 어노테이션이다.
@BeforeEach
- 테스트를 시작하기 전 공통적으로 들어가는 부분이다. 지금 사용하는 이유로는 테스트를 진행하기에 앞서 DB의 title, author를 사용할 것이므로 사전에 데이터를 사용하기 위해서 이기도 하고, 이렇게 하면 매번 테스트를 하기 위해서 상기의 코드를 작성해야하는데 공통적인 부분을 줄이기 위해서 이다.
Builder
- builder를 사용하는 것으로 보다 편리하게 SQL을 이용할 수 있다. 순서를 달리 해도 되고, title, author 그 외의 id도 있는데 작성하지 않아도 된다.
book등록 테스트
// 1. book 登録テスト
@Test
public void book_登録() {
//given (データの準備)
String title = "new_junit";
String author = "new_coding";
Book book = Book.builder()
.title(title)
.author(author)
.build();
//when (テスト実行)
Book bookPS = bookRepository.save(book);
//then (検証)
assertEquals(title, bookPS.getTitle());
assertEquals(author, bookPS.getAuthor());
// System.out.println(bookPS.getTitle());
}
given when then으로 구분지었다. (대부분 이렇게 하는 것이 좋다고 해서 노력중이다. )
given 데이터 정의 등록
등록을 하기위해 title과 author을 정의 하고
Book객체에 builder를 이용해서 데이터를 넣었다.
when 테스트 실행
테스트를 하기 위해서 Book객체에 bookRepository의 save메서드를 이용해서 방금 만든
book의 데이터를 bookPS에 집어 넣는다.
asserEquals메서드를 이용해서 title과 bookPS에서 getTitle()를 이용해서 비교한다.
assertEquals는 메서드의 인자 1번과 2번을 비교해준다.
참고로, bookPS는 데이터베이스에 저장된 데이터라는 의미라고 한다. 강사님이
이렇게 하면 더욱 도움이 된다고 했다.
글이 길어질 거 같아서 리스트와 화면상세 서치, 삭제는 다음글에 게시하도록 하겠다.