NoticeDaoTest.java

@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);
	}
}
 
egovframework/dev2/tst/noticedaotest.java.txt · 마지막 수정: 2023/12/21 05:21 (외부 편집기)
 
이 위키의 내용은 다음의 라이센스에 따릅니다 :CC Attribution-Noncommercial-Share Alike 3.0 Unported
전자정부 표준프레임워크 라이센스(바로가기)

전자정부 표준프레임워크 활용의 안정성 보장을 위해 위험성을 지속적으로 모니터링하고 있으나, 오픈소스의 특성상 문제가 발생할 수 있습니다.
전자정부 표준프레임워크는 Apache 2.0 라이선스를 따르고 있는 오픈소스 프로그램입니다. Apache 2.0 라이선스에 따라 표준프레임워크를 활용하여 발생된 업무중단, 컴퓨터 고장 또는 오동작으로 인한 손해 등에 대해서 책임이 없습니다.
Recent changes RSS feed CC Attribution-Noncommercial-Share Alike 3.0 Unported Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki