@RunWith(UnitilsJUnit4TestClassRunner.class)
@Transactional(TransactionMode.ROLLBACK)
@SpringApplicationContext({"/META-INF/persistence/connection/datasource-spring-with-unitils.xml",
"/META-INF/spring/context-common.xml",
"/META-INF/spring/context-sqlmap.xml"})
public class DaoOperationTest_noticeDao {
/**
* unitils.properties 에 설정 된 database 접근 정보를 기반으로
* 테스트 용 DataSource 를 만든 후 자동으로 injection 해 준다.
* (unitils.properties 파일의 위치와 이름은 변경할 수 없다.)
*
* updateDataBaseSchema.enabled=true 로 설정되어 있으면
* dbMaintainer.script.locations 에서 지정한 위치의 sql 문을 실행시켜준다.
* 주의) 생성 시점은 test 메소드가 실행되기 전이다.
* 따라서, 단순히 TestDataSource 만 선언하는 것이 아니라,
* 하나 이상의 test 메소드라도 있어야 결과 확인이 가능하다.
*
* @see unitils.properties
* @see dbMaintainer.script.locations 에서 지정한 위치의 sql 문
*/
@TestDataSource
private DataSource dataSource;
/** 테스트를 위해 만든 타겟 클래스로서 공지사항 비즈니스 구현을 위한 Dao */
@SpringBean("noticeDao")
private NoticeDao noticeDao;
/** 테스트를 위해 만든 타겟 클래스로서 공지사항 비즈니스 구현을 위한 Value Object */
private NoticeVo noticeVo;
/**
* 공지사항 등록을 위한 Value Object 를 만들어내는 메소드로서 테스트 수행 직전에 수행
*/
@Before
public void makeNoticeVo() {
noticeVo = new NoticeVo();
noticeVo.setId(201);
noticeVo.setTitle("201번 공지");
noticeVo.setContents("테스트용으로 자동 입력된 공지사항 201번입니다.");
noticeVo.setLastModifier("OracleDataSetTest.class");
long currentTime = new java.util.Date().getTime();
noticeVo.setRegistrationDate(new java.sql.Date(currentTime));
}
/**
* 자동으로 생성된 Test 용 DataSource 를 정상적으로 Get 했는지를 확인
*/
@Test
public void checkTestDataSource() {
assertNotNull("Test DataSource 를 정상적으로 get 했는지를 확인한다.", dataSource);
}
/**
* 자동으로 생성된 Test 용 Dao 를 정상적으로 Get 했는지를 확인
*/
@Test
public void checkTestDao() {
assertNotNull("Test 대상 Dao 를 정상적으로 get 했는지를 확인한다.", noticeDao);
}
/**
* Dao 의 selectCount 메소드에 대한 테스트
* 테스트용 데이터) 클래스에 선언한 DataSet 에 정의 된 데이터
* 테스트 결과) DataSet 에 3건을 정의했으므로 selectCount 의 결과는 3건이면 성공
*/
@Test
@DataSet("/META-INF/persistence/testdata/AutoInsertionTestDataTest_DataSet.xml")
public void testSelectCount() {
int count = noticeDao.selectCount();
assertEquals("테스트용 데이터셋 3건을 입력한 뒤 전체 목록을 조회하면 3건임을 확인", 3, count);
}
/**
* Dao 의 selectList 메소드에 대한 테스트
* 테스트용 데이터) 클래스에 선언한 DataSet 에 정의 된 데이터
* 테스트 결과) 전체 목록을 조회하여 각각의 내용을 담은 Value Object 가 Null 이 아니면 성공
*/
@Test
@DataSet("/META-INF/persistence/testdata/AutoInsertionTestDataTest_DataSet.xml")
public void testSelectList() {
List<NoticeVo> noticeList = noticeDao.selectList();
for(NoticeVo noticeVo:noticeList) {
assertNotNull("조회한 noticeVo 객체가 null 이 아님을 확인", noticeVo);
}
}
/**
* Dao 의 Insert 메소드에 대한 테스트
* 테스트용 데이터 ) 테스트 프로그램 수행 중 만들어낸 noticeVo
* 테스트 결과) 테스트용 데이터셋 1건을 추가 입력한 뒤 목록조회하면 4건이면 성공
*/
@Test
@DataSet("/META-INF/persistence/testdata/AutoInsertionTestDataTest_DataSet.xml")
@ExpectedDataSet("/META-INF/persistence/testdata/AutoVerifyTestResultsTest_ExpectedDataSet.xml")
public void testInsert() {
assertNotNull(noticeVo);
noticeDao.insert(noticeVo);
int count = noticeDao.selectCount();
assertEquals("테스트용 데이터셋 1건을 추가 입력한 뒤 목록조회하면 4건임을 확인", 4, count);
}
/**
* Dao 의 Delete 메소드에 대한 테스트
* 테스트용 데이터 ) DataSet 에 선언한 항목 중 2건에 해당하는 Id 값(101, 102)
* 테스트 결과) 테스트용 데이터셋 3건을 입력한 뒤2건을 삭제 후 목록조회하면 1건이면 성공
*/
@Test
@DataSet("/META-INF/persistence/testdata/AutoInsertionTestDataTest_DataSet.xml")
public void testDelete() {
noticeDao.delete(101);
noticeDao.delete(102);
int count = noticeDao.selectCount();
assertEquals("테스트용 데이터셋 3건을 입력한 뒤2건을 삭제 후 목록조회하면 1건임을 확인", 1, count);
}
}
이 위키의 내용은 다음의 라이센스에 따릅니다 :
CC Attribution-Noncommercial-Share Alike 3.0 Unported전자정부 표준프레임워크 라이센스(
바로가기)
전자정부 표준프레임워크 활용의 안정성 보장을 위해 위험성을 지속적으로 모니터링하고 있으나, 오픈소스의 특성상 문제가 발생할 수 있습니다.
전자정부 표준프레임워크는 Apache 2.0 라이선스를 따르고 있는 오픈소스 프로그램입니다. Apache 2.0 라이선스에 따라 표준프레임워크를 활용하여 발생된 업무중단, 컴퓨터 고장 또는 오동작으로 인한 손해 등에 대해서 책임이 없습니다.