Junit ( 테스트 관련 )

jhnada·2022년 9월 30일
  • 일반 코드와 같이 엔티티

  • 다오 작성

  • xml 작성

  • 개념 그림



9/30

  • 테스트 실행할때 왼쪽의 체크표시 있는부분 누르고
    정상실행시 = 초록색
    터질시 = 빨강색과 코드폭탄

  • 목록과 1개 찾기 테스트 성공장면.

MyBatis는 ResultSet을 자바 Entity로 변경해줄때 빈생성자만 호출하고 setter가 없어도 값을 매핑해준다.

  • 빈공간에서 alt + enter 하면
    위에서 생성자 만드는 창 나옴!
    만들고 싶은 변수 생성자 체크

마이바티스는 너무 거대해서 라이브라리라기 보다 프레임 워크라고 봄
프로덕트라는 엔티티를 new 해서 메모리에 띄어야하는데
의도를 명확하게 하려는

이걸 만들어서 디폴트가 사라졌으니까 Test와서 테스트 바로 가능
위에서 실행해보면 터짐. 빈 생성자가 없어서 그럼.

  • 빈생성자가 있으니까 Test 를 해도 안 터짐.
  • private로 바꾸면 ?
  • Test 가서 시도하면 성공함.
  • 확장자 추가
@Import(MyBatisConfig.class) // MyBatisTest가 MyBatisConfig를 못읽음
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) // 실DB사용
@MybatisTest
public class ProductDaoTest {

    @Autowired
    private ProductDao productDao;

    @Test
    public void findById_test() {
        // given - ( 컨트롤러에서 받아야 될 것)
        Integer productId = 1;

        // when - ( 테스트 )
        Product productPS = productDao.findById(productId);

        // then - ( 검증 )
        assertEquals("바나나", productPS.getProductName());

    }

    @Test
    public void findAll_test() {
        // given

        // when PS = 영속화 되어있는 데이터를 뜻함
        List<Product> productListPS = productDao.findAll();

        // then
        assertEquals(2, productListPS.size());
    }

    // MyBatis는 REsultSet을 자바 Entity로 변경해줄때 빈생성자만 호출하고 setter가 없어도 값을 매핑해준다.
    @Test
    public void insert_test() {
        // given
        String productname = "수박";
        Integer productPrice = 1000;
        Integer productQty = 100;

        Product product = new Product(productname, productPrice, productQty);

        // when
        int result = productDao.insert(product);

        // then
        assertEquals(1, result);
    } // rollback

    @Test
    public void update_test() {
        // given
        Integer productId = 1;
        String productName = "수박";
        Integer productPrice = 1000;
        Integer productQty = 100;

        Product product = new Product(productName, productPrice, productQty);
        product.setProductId(productId);

        // verify
        Product productPS = productDao.findById(product.getProductId());
        assertTrue(productPS == null ? false : true);

        // when
        // product[id=1, productName="수박", productPrice=1000, productQty=100]
        // productPS [id=1, productName="바나나", productProce= 3000, productQty=98,
        // createdAt=2022-09-29]
        productPS.update(product);
        // productPS [id=1, productName="tnqkr", productProce= 1000, productQty=100,
        // createdAt=2022-09-29]
        int result = productDao.update(productPS);
        // then
        assertEquals(1, result);
    }

    @Test
    public void deleteById_test() {
        // given
        Integer productId = 1;

        // verify
        Product productPS = productDao.findById(productId);
        assertTrue(productPS == null ? false : true);

        // when
        int result = productDao.deleteById(productId);

        // then
        assertEquals(1, result);
    }
}
  • 모든 테스트 정상
profile
밑바닥부터 배우는 초짜 개발자

0개의 댓글