Helmi

게시판 프로젝트 - 비즈니스 계층 ② 비즈니스 계층의 구현, 테스트 본문

SpringBoot

게시판 프로젝트 - 비즈니스 계층 ② 비즈니스 계층의 구현, 테스트

Helmi 2023. 5. 3. 12:55

com.board.service.BoardServiceTests 클래스 작성해 테스트 진행

 

테스트 환경의 BoardServiceTests

package com.board.service;

import static org.junit.Assert.assertNotNull;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
//Java Config
// @ContextConfiguration(classes={com.board.config.RootConfig.class})
@Log4j
public class BoardServiceTests {

	@Setter(onMethod_ = {@Autowired})
	private BoardService service;
	
	@Test
	public void testExist() {
		log.info(service);
		assertNotNull(service);
	}
}

콘솔 - 실행결과


1. 등록작업 구현, 테스트

등록 작업은 BoardServiceImple에서 파라미터로 전달되는 BoardVO 타입의 객체를 BoardMapper 통해 처리

 

BoardServiceImpl.java 일부

	@Override
	public void register(BoardVO board) {
    
		log.info("register..." + board);
        
		mapper.insertSelectKey(board);
	}

BoardService는 void 타입으로 설계 됨 - mapper.insertSelectKey()의 반환값인 int 사용하지 않고 있으나 필요하면 예외 처리나 void 대신 int 타입 이용해 사용 가능

 

mapper의 insertSelcetKey() 이용해 나중에 생성된 게시물의 번호 확인 가능, 테스트

 

BoardServiceTests.java 일부

	@Test
	public void testRegister() {
		
		BoardVO board = new BoardVO();
		board.setTitle("새로 작성하는 글");
		board.setContent("새로 작성하는 내용");
		board.setWriter("newbie");
		
		service.register(board);
		
		log.info("생성된 게시물 번호 :" + board.getBno());
	}

콘솔 - 실행 결과


2. 목록(리스트)작업의 구현과 테스트

BoardServiceImpl 클래스에서 현재 테이블에 저장된 모든 데이터 가져오는 getList() 구현

 

BoardServiceImpl.java 일부

	@Override
	public List<BoardVO> getList() {
		log.info("getList...");
		return mapper.getList();
	}

com.board.service.BoardServiceTests.java 일부

@Test
public void testGetList() {
  service.getList().forEach(board->log.info(board));
 }

콘솔- 실행 결과


3. 조회 작업의 구현과 테스트

조회는 게시물의 번호가 파라미터, BoardVO의 인스턴스가 리턴 됨

BoardServiceImpl.java 일부

	@Override
	public BoardVO get(Long bno) {
		log.info("get..." + bno);
		return mapper.read(bno);
	}

com.board.service.BoardServiceTests.java 일부

@Test
public void testGet() {
 log.info(service.get(1L));
}

콘솔 - 실행결과


4. 삭제/수정 구현과 테스트

삭제/ 수정은 메서드 리턴 타입을 void로 설계할 수도 있지만 엄격하게 처리하기 위해 Boolean 타입으로 처리

com.board.service.BoardServiceImpl.java 일부

	@Override
	public boolean modify(BoardVO board) {
		log.info("modify..." + board);
		return mapper.update(board)==1;
	}

	@Override
	public boolean remove(Long bno) {
		log.info("remove..." + bno);
		return mapper.delete(bno)==1;
	}

정상적으로 수정과 삭제 이뤄지면 1이라는 값 반환되므로 '==' 연산자 이영해 true/false 처리 가능

 

com.board.service.BoardServiceTests.java 일부

	@Test
	public void testDelete() {
		//게시물 번호의 존재 여부 확인하고 테스트 할 것
		log.info("REMOVE RESULT : " + service.remove(2L));
	}
	
	@Test
	public void testUpdate() {
		BoardVO board = service.get(1L);
		
		if(board == null) {
			return;
		}
		
		board.setTitle("제목 수정합니다.");
		log.info("MODIFY RESULT : "+service.modify(board));
	}

testDelete() 경우 해당 게시물 존재시 true 반환하는 것 확인 가능, testUpdate() 경우 특정 게시물 먼저 조회하고, title 값을 수정 후 업뎃