SpringFramework/BASIC

[JunitTest 2] @Runwith, @ContextConfiguration / 데이터 조회 및 삭제기능 Test

유혁스쿨 2020. 9. 4. 17:21
728x90
반응형

게시글을 등록하는 테스트를 진행하겠습니다.

반복문으로 320개 행을 추가해보겠습니다.

public class BoardMapperTest {

    @Test
    public void insertTest() {
        for(int i=1; i<=320; i++) {
            BoardVO article = new BoardVO();
            article.setTitle("테스트 제목."+i);
            article.setWriter("테스트 이름"+i);
            article.setContent("테스트 내용"+i);
            mapper.insert(article);
            System.out.println("게시물 등록 성공");
        }
    }
}

 

잠깐!

Mapper 인터페이스를 의존성 주입을 해 줘야 쿼리문이 수행됩니다.

 

@Runwith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(location={"빈등록해주는 설정파일 경로"})

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/mvc-config.xml"})
public class BoardMapperTest {
	
    @Autowired
    private IBoardMapper mapper;
    
    @Test
    public void insertTest() {
        for(int i=1; i<=320; i++) {
            BoardVO article = new BoardVO();
            article.setTitle("테스트 제목."+i);
            article.setWriter("테스트 이름"+i);
            article.setContent("테스트 내용"+i);
            mapper.insert(article);
            System.out.println("게시물 등록 성공");
        }
    }
}

@Autowired로 의존성을 주입 하기위해서는 jUnitTest에서는 추가적인 어노테이션인 @Runwith(SpringJUnit4ClassRunner.class)를 선언해줘야하며 이 어노테이션을 사용하기 위해서는 Spring test 라이브러리가 있어야합니다.

mapper를 빈등록해주는 설정파일은 mvc-config.xml에서 mybatis-spring:scan 으로 빈등록 설정을 자동으로하고 있습니다.

빈 등록 해주는 설정파일의 위치를 자동으로 잡아줘야하며 @ContextConfiguration(location={"빈등록해주는 설정파일 경로"}) 를 선언해줘야 합니다.

 

 

게시글 목록을 조회하는 테스트를 진행합니다.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/mvc-config.xml"})
public class BoardMapperTest {
	
    @Autowired
    private IBoardMapper mapper;
	
    //게시글 목록 조회 테스트
    @Test
    public void getListTest() {
        List<BoardVO> list = mapper.getArticleList();
        for(BoardVO vo : list) {
            System.out.println(vo);
        }
    }
    
}

람다식으로 변경이 가능합니다

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/mvc-config.xml"})
public class BoardMapperTest {
	
    @Autowired
    private IBoardMapper mapper;
	
    //게시글 목록 조회 테스트
    @Test
    public void getListTest() {
        mapper.getArticleList().forEach(vo->System.out.println(vo));
    }

}

forEach가 확장for문을 대신합니다.
원래방식대로라면 메서드를 호출하고 그 결과값을 list레퍼런스에 담은 후 반복문을통해 list로부터 vo로 꺼낸후 한번씩출력하는 동작을 여러번 반복합니다. 
List를 생략하고 메서드 그대로 수행하면서 반복문으로 vo에담은후 그것을 반복해서 출력해주는것입니다.
이것이 람다식의 메서드 체인방식입니다.

 

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/mvc-config.xml"})
public class BoardMapperTest {
	
    @Autowired
    private IBoardMapper mapper;
	
	//게시글 등록 테스트
    @Test
    public void insertTest() {
        for(int i=1; i<=320; i++) {
            BoardVO article = new BoardVO();
            article.setTitle("테스트 제목"+i);
            article.setWriter("테스트 이름"+i);
            article.setContent("테스트 내용"+i);
            mapper.insert(article);
            System.out.println("게시물 등록 성공");
        }
    }
	
    //게시글 목록 조회 테스트
    @Test
    public void getListTest() {
        /*
        List<BoardVO> list = mapper.getArticleList();
        for(BoardVO vo : list) {
            System.out.println(vo);
        }
        */
        mapper.getArticleList().forEach(vo->System.out.println(vo));

    }
    //게시글 단일 조회 테스트
    @Test
    public void getArticleTest() {
        BoardVO article = mapper.getArticle(44);
        System.out.println(article);
    }
	
	//게시물 수정 테스트 : VO의 세터를 사용할 수정내용 (글제목, 글내용)을 입력하고 수정을 테스트 해 보세요.
    @Test
    public void update() {
        BoardVO article = new BoardVO();
        article.setBoardNo(1);
        article.setTitle("글제목"); article.setContent("글내용");
        mapper.update(article);
        System.out.println("수정 후 정보 : "+mapper.getArticle(44));
	}
	
    //게시물 삭제 테스트 : 게시글 번호를 통한 삭제를 확인하세요.
    @Test 
    public void delete() {
        mapper.delete(44);
        System.out.println("삭제 후 정보 : "+mapper.getArticle(44));
    }
}

 

outline에 뜨는 메서드를 하나씩 눌러서 Test합니다.

이것이 단위테스트 입니다.

이렇게 단위테스트를 해서 DB에 잘 입력이되는가 혹은 아작스로데이터를 받을때 데이터를받아지는가에 대한 로직들을 미리 테스트를 거쳐 구현할수있도록 합니다.
프로그램이 커지면 커질수록 미리 테스트로 확인해보고 적용하는것이 효율적입니다.

728x90
반응형