블로그 분류 코드 TDD 개발하기

From JCFWiKi

Jump to: navigation, search

목차

[편집] 개요

  • 블로그의 분류를 추가하기 위해서 TDD 기반으로 코드모듈을 생성하는 예제
  • 관련 테이블을 생성하고 TestCodeService라는 JUnit 테스트 모듈을 통해 CodeService와 CodeDao를 개발한다.

[편집] 소스다운받기

그림:information.gif

[편집] 순서

  • 테이블 생성 및 수정
  • 코드값 INSERT
  • test소스디렉토리에 edu.code.service.TestCodeService 생성.
  • src 소스 디렉토리에서 code 모듈 개발
    • edu.code.model.Code 모듈 추가하고 프라퍼티 및 getter/setter 추가.
    • edu.code.service.CodeService 클래스 생성하고 의존성 및 API추가
      • private CodeDao codeDao 프라퍼티 선언 및 setter 추가
      • public List getCodes(String category) 메소드 개발
      • public Code getCode(String id) 메소드 개발
      • config/applicationContext-code.xml에 CodeService를 스프링 관리 빈으로 추가
    • edu.code.dao.CodeDao 클래스 생성하고 API추가.
      • jcf.dao.ibatis.BaseSqlMapClientDAO 상속
      • public List getCodes(String category) 메소드 개발
      • public Code getCode(String id) 메소드 개발
      • config/applicationContext-code.xml에 CodeDao를 스프링 관리 빈으로 추가
    • edu.code.dao.sqlmap.Code.xml 파일 생성하여 SQL 문장 작성
      • getCodes 및 getCode <statement/>에 SQL 작성
      • config/sqlmap-config.xml에 Code.xml 추가
    • test 클래스인 TestCodeService 클래스를 JUnit 테스트로 실행(alt+shift+x --> t)
      • 2개의 테스트 메소드 성공시 성공

[편집] 테이블 생성

CREATE TABLE CODE(
	id 			int,
	name		varchar(20),
	description varchar(50),
	category	varchar(20),
	CONSTRAINT code_pk PRIMARY KEY(id)
)
INSERT INTO CODE(id, name, description, category) VALUES(5, 'diary', '일상','blog_category_code');
INSERT INTO CODE(id, name, description, category) VALUES(6, 'news', '뉴스','blog_category_code');
INSERT INTO CODE(id, name, description, category) VALUES(7, 'pleasure', '기쁜일','blog_category_code');
 
// ALTER TABLE BLOG ADD categoryId int
// HSQLDB는 ALTER가 잘 안되는 경우가 발생하므로 DROP 후 새로 생성함.
 
DROP TABLE BLOG;
 
CREATE TABLE BLOG(
	id			int,
	title		varchar(50),
	writer		varchar(50),
	description	varchar(500),
	regDate		date,
	isPublic	char(1),
	categoryId int,
	CONSTRAINT blog_pk PRIMARY KEY(id)
)

[편집] 서비스테스트 모듈

import java.util.List;
 
import junit.framework.Assert;
import junit.framework.TestCase;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
import edu.code.model.Code;
 
public class TestCodeService extends TestCase{
 
	private CodeService codeService;
	
	protected void setUp() throws Exception {
		super.setUp();
		AbstractApplicationContext context = 
			new ClassPathXmlApplicationContext(new String[]{"config/applicationContext.xml", "config/applicationContext-code.xml"});
		
		codeService = (CodeService) context.getBean("codeService");
	}
	
	public void testGetCodes(){
		List codes = codeService.getCodes("blog_category_code");
		Assert.assertNotNull(codes);
		Assert.assertEquals(3, codes.size());
	}
	
	public void testGetCode(){
		Code code = codeService.getCode(5);
		Assert.assertNotNull(code);
		Assert.assertEquals("일상", code.getDescription());
	}
}

[편집] 분류코드가 추가된 블로그 화면

  • 테스트가 완료된 CodeService 모듈을 BlogAction에 추가하여 다음과 같이 블로그 분류값을 선택적으로 입력할 수 있도록 개발.
분류코드가 추가된 블로그 화면

[편집] 개발산출물