JUnit 처리 방법
1. spring-test dependency를 추가한다.
2. @Runwith를 추가한다.
3. @ContextConfiguration을 추가한다.
ContactDao 객체(Bean)을 생성한 방법에 따라서 아래 3가지 방식 중 선택한다.
1) <bean> 태그 : @ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/spring/root-context.xml")
2) @Bean : @ContextConfiguration(classes = AppConfig.class)
3) @Component : @ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml")
// JUnit4를 이용한다.
@RunWith(SpringJUnit4ClassRunner.class)
// ContactDao Bean 생성 방법을 알려준다.
@ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml")
// 테스트 메소드의 이름 오름차순(알파벳순)으로 테스트를 수행한다.
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ContactUnitTest {
@Autowired // Spring Container에서 ContactDao 객체(Bean)을 가져온다.
private ContactDao contactDao;
@Test // 테스트를 수행한다.
public void test01_삽입테스트() {
ContactDto contactDto = new ContactDto(0, "이름", "연락처", "이메일", "주소", "");
int insertResult = contactDao.insert(contactDto);
assertEquals(1, insertResult); // insertResult가 1이면 테스트 성공이다.
}
@Test // 테스트를 수행한다.
public void test02_조회테스트() {
int contact_no = 1;
ContactDto contactDto = contactDao.selectContactByNo(contact_no);
assertNotNull(contactDto); //contactDto가 not null이면 테스트 성공이다.
}
@Test
public void test03_삭제() {
int contact_no = 1;
int deleteResult = contactDao.delete(contact_no);
assertEquals(1, deleteResult); // deleteResult가 1이면 테스트 성공이다.
// assertNull(contactDao.selectContactByNo(contact_no)); select 결과가 null이면 테스트 성공이다.
}
<configuration>
<!-- Appenders : 로그를 출력하는 Appender 모음 -->
<!--
%d{날짜시간패턴} : 로그기록시간 (SimpleDateFormat과 같은 날짜시간패턴)
%level : 로그 레벨 (OFF > ERROR > WARN > INFO > DEBUG > TRACE)
%logger : 로그를 찍는 클래스 (어떤 클래스가 동작할 때 로그가 남겨지는가?)
%msg : 로그 메시지
%n : 줄 바꿈
-->
<!-- Console에 로그를 찍는 Appender -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{HH:mm:ss, Asia/Seoul}]%-5level: %logger-%msg%n</pattern>
</encoder>
</appender>
<!-- File에 로그를 찍는 Appender -->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>/log/app09_log.log</file>
<append>true</append>
<immediateFlush>true</immediateFlush>
<encoder>
<pattern>[%d{HH:mm:ss, Asia/Seoul}]%-5level: %logger-%msg%n</pattern>
</encoder>
</appender>
<!-- 매일 새로운 로그 파일을 만드는 RollingFileAppender -->
<appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>/log/app09.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>[%d{HH:mm:ss, Asia/Seoul}]%-5level: %logger-%msg%n</pattern>
</encoder>
</appender>
<!-- Application Loggers -->
<logger name="com.gdu.app09" level="info"/>
<!-- 3rdparty Loggers -->
<logger name="org.springframework" level="info"/>
<logger name="log4jdbc" level="info" />
<logger name="jdbc.sqlonly" level="info" /> <!-- 쿼리문 출력하기 -->
<logger name="jdbc.sqltiming" level="off" /> <!-- 쿼리문 + 실행시간 출력하기 -->
<logger name="jdbc.resultsettable" level="info" /> <!-- SELECT 결과를 테이블 형식으로 출력하기 -->
<logger name="jdbc.connection" level="off" /> <!-- Connection 연결/종료 정보 출력하기 -->
<logger name="jdbc.audit" level="off" /> <!-- ResultSet을 제외한 jdbc 호출 정보 출력하기 -->
<logger name="jdbc.resultset" level="off" /> <!-- ResultSet을 포함한 jdbc 호출 정보 출력하기 -->
<!-- Root Logger -->
<root>
<priority value="warn" />
<appender-ref ref="console" />
<appender-ref ref="rolling" />
</root>
</configuration>