BackEnd/JUnit
[JUnit4, MyBatis] 작성한 CRUD SQL 에 대해 테스트 코드 작성
ejyoovV
2021. 5. 19. 16:23
환경
1. JUnit 4
2. JDK 1.8
3. DBCP 2.5
4. MyBatis 3.5
5. Ojdbc6
사전준비 - MyBatis SqlSessionFactory 클래스 생성
package ejyoo.servlet.util;
import java.io.Reader;
import java.sql.Connection;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.session.TransactionIsolationLevel;
public class OracleMyBatisSqlSessionFactory implements SqlSessionFactory{
private SqlSessionFactory sqlSessionFactory;
{
String config = "kr/or/ddit/mybatis/sqlConfig.xml";
try {
Reader reader = Resources.getResourceAsReader(config);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
System.out.println("sqlSessionFactory 성공했습니다.");
} catch(Exception e) {
System.out.println("sqlSessionFactory 실패했습니다.");
e.printStackTrace();
}
}
@Override
public Configuration getConfiguration() {
return sqlSessionFactory.getConfiguration();
}
@Override
public SqlSession openSession() {
return sqlSessionFactory.openSession(true);
}
@Override
public SqlSession openSession(boolean arg0) {
return sqlSessionFactory.openSession(arg0);
}
@Override
public SqlSession openSession(Connection arg0) {
return sqlSessionFactory.openSession(arg0);
}
@Override
public SqlSession openSession(TransactionIsolationLevel arg0) {
return sqlSessionFactory.openSession(arg0);
}
@Override
public SqlSession openSession(ExecutorType arg0) {
return sqlSessionFactory.openSession(arg0);
}
@Override
public SqlSession openSession(ExecutorType arg0, boolean arg1) {
return sqlSessionFactory.openSession(arg0, arg1);
}
@Override
public SqlSession openSession(ExecutorType arg0, TransactionIsolationLevel arg1) {
return sqlSessionFactory.openSession(arg0, arg1);
}
@Override
public SqlSession openSession(ExecutorType arg0, Connection arg1) {
return sqlSessionFactory.openSession(arg0, arg1);
}
}
사전준비 - sqlConfig.xml Builder로 로딩 (SqlConfig, Mapper 로드)
- implements SqlSessionFactory 한 클래스 생성
- sqlConfig.xml(SqlConfig, Mapper) 가져와서 Builder로 로딩
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="kr/or/ddit/properties/db.properties" />
<typeAliases>
<typeAlias type="java.lang.String" alias="str" />
<typeAlias type="java.lang.Integer" alias="int" />
<typeAlias type="ejyoo.dto.MemberVO" alias="member" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<!-- pool setting -->
<property value="2" name="poolMaximumActiveConnections" />
<property value="2" name="poolMaximumIdleConnections" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="kr/or/ddit/mybatis/Member-Mapper.xml" />
</mappers>
</configuration>
테스트 코드 작성할 클래스 생성
@Before, @After 에 Session 시작 삭제 코드 작성
@Before
public void openSession() {
session = factory.openSession();
}
@After
public void closeSession() {
session.close();
}
모든 쿼리 테스트 코드 작성
@Test
public void selectMemberListSQL() {
MemberVO paramTypeMemberVo = new MemberVO();
paramTypeMemberVo.setUserNo(124);
paramTypeMemberVo.setUserId("test3");
paramTypeMemberVo.setUserPw("yej33585");
paramTypeMemberVo.setUserPhone("010-0000-0000");
paramTypeMemberVo.setUserEmail("test@test.com");
List<MemberVO> memberVoList = session.selectList("Member-Mapper.selectMemberList",paramTypeMemberVo);
Assert.assertTrue(memberVoList.size()>0);
}
@Test
public void selectMemberByInfoSQL() {
MemberVO paramTypeMemberVo = new MemberVO();
paramTypeMemberVo.setUserNo(124);
paramTypeMemberVo.setUserId("test3");
paramTypeMemberVo.setUserPw("yej33585");
paramTypeMemberVo.setUserPhone("010-0000-0000");
paramTypeMemberVo.setUserEmail("test@test.com");
MemberVO memberVo = session.selectOne("Member-Mapper.selectMemberById",paramTypeMemberVo);
Assert.assertEquals("test3", memberVo.getUserId());
}
@Test
public void selectMemberByIdSQL() {
String userId = "test3";
MemberVO memberVo = session.selectOne("Member-Mapper.selectMemberById",userId);
Assert.assertEquals("test3", memberVo.getUserId());
}
@Test
public void insertMemberByInfoSQL() {
MemberVO paramTypeMemberVo = new MemberVO();
paramTypeMemberVo.setUserId("test3");
paramTypeMemberVo.setUserPw("yej33585");
paramTypeMemberVo.setUserPhone("010-0000-0000");
paramTypeMemberVo.setUserEmail("test@test.com");
int cnt = session.insert("Member-Mapper.insertMemberByInfo", paramTypeMemberVo);
Assert.assertEquals(1, cnt);
}
@Test
public void updateMemberByInfoSQL() {
MemberVO paramTypeMemberVo = new MemberVO();
paramTypeMemberVo.setUserNo(124);
paramTypeMemberVo.setUserId("test4");
paramTypeMemberVo.setUserPw("yej3585");
paramTypeMemberVo.setUserPhone("010-1111-1111");
paramTypeMemberVo.setUserEmail("test@test.com");
int cnt = session.update("Member-Mapper.updateMemberByInfo", paramTypeMemberVo);
Assert.assertTrue(cnt == 1);
}
@Test
public void deleteMemberByIdSQL() {
String userId = "test3";
int cnt = session.update("Member-Mapper.deleteMemberById", userId);
Assert.assertTrue(cnt == 1);
}