# JUnit
- 프로그래밍 유닛 테스트 프레임워크
- 프로그램의 각 부분이 정확하게 동작하는지 확인
# JUnit
- @RunWith
> JUnit 프레임워크 테스트 실행 방법을 설정할 때 사용
@ContextConfiguration
> 설정 파일의 위치를 지정할 때 사용
@Test
> 해당 메서드는 테스트 메서드가 됨
@Before
> 해당 메서드는 @Test 메서드 실행전에 실행됨
-------------------------------------------------------------------
- pom.xml 추가
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
library 추가
# HikariCP
- 빠르고 안정적인 JDBC ConnectionPool 입니다
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
# 데이터 베이스 설정
- WEB-INF/spring/root-context.xml 파일에 작성
- 기존 파일 삭제후 파일 새로 추가
> beans, mybatis-spring 체크
- 기존 파일 수정
상위 beans 에 아래 내용 추가
> xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
- 설정
<!-- root-context.xml -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="dbtest"/>
<property name="password" value="a1234"/>
</bean>
<!-- 히카리 데이터소스 빈 등록 -->
<bean id="ds" class="com.zaxxer.hikari.HikariDataSource">
<constructor-arg ref="hikariConfig"/>
</bean>
<!-- 데이터 소스 마이바티스에 등록 및 xml 위치 설정 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="ds"/>
<property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml"/>
</bean>
<!-- 마이바티스 xml 파일과 dao 빈 연결 -->
<mybatis-spring:scan base-package="com.web.root.member.dao"/>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd">
<!-- root-contexst.xml -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="dbtest"/>
<property name="password" value="a1234"/>
</bean>
<!-- Hikari 데이터소스 빈 등록 -->
<bean id="ds" class="com.zaxxer.hikari.HikariDataSource">
<constructor-arg ref="hikariConfig"/>
</bean>
<!-- 데이터 소스 mybatis 에 등록 및 xml 위치 설정/mapper -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="ds"/>
<property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml"/>
</bean>
<!-- mybatis xml 파일과 dao 빈 연결 -->
<mybatis-spring:scan base-package="com.web.root.member.dao"/>
</beans>
package com.web.root.member.dto;
public class MemberDTO {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.web.root.member.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import com.web.root.member.dto.MemberDTO;
import com.web.root.member.service.MemberService;
@Controller
public class MemberController {
@Autowired
private MemberService ms;
@GetMapping("index")
public String index() {
return "/member/index";
}
@GetMapping("insertView")
public String insertView() {
return "/member/insertView";
}
@PostMapping("insert")
public String insert(MemberDTO dto) {
ms.insertMember(dto);
return "redirect:index";
}
@GetMapping("memberView")
public String memberView() {
return "/member/memberView";
}
}
package com.web.root.member.service;
import com.web.root.member.dto.MemberDTO;
public interface MemberService {
public void insertMember(MemberDTO dto);
}
package com.web.root.member.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.web.root.member.dao.MemberDAO;
import com.web.root.member.dto.MemberDTO;
@Service
public class MemberServiceImpl implements MemberService{
@Autowired
MemberDAO mapper;
@Override
public void insertMember(MemberDTO dto) {
// TODO Auto-generated method stub
mapper.insertMember(dto);
}
}
package com.web.root.member.dao;
import com.web.root.member.dto.MemberDTO;
public interface MemberDAO {
public void insertMember(MemberDTO dto);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.web.root.member.dao.MemberDAO">
<insert id="insertMember">
INSERT INTO mybatis VALUES(#{id}, #{name})
</insert>
</mapper>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.jsp</title>
</head>
<body>
<h1>index</h1>
<h2><a href="insertView">데이터 추가</a></h2>
<h2><a href="memberView">데이터 확인</a></h2>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>insertView.jsp</title>
</head>
<body>
<h1>데이터 입력</h1>
<form action="insert" method="post">
<input type="text" name="id" placeholder="id"/> <br><br>
<input type="text" name="name" placeholder="name"/> <br><br>
<input type="submit" value="submit"/>
</form>
</body>
</html>
-- JUnit 테스트 테이블
CREATE TABLE mybatis(
id NUMBER(4),
name VARCHAR2(20)
);
desc mybatis;
select * from mybatis;
package com.web.root;
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import com.web.root.member.controller.MemberController;
import com.web.root.member.dao.MemberDAO;
import com.web.root.member.dto.MemberDTO;
import com.web.root.member.service.MemberService;
@RunWith(SpringRunner.class)
@ContextConfiguration(locations = {"classpath:testMember.xml",
"file:src/main/webapp/WEB-INF/spring/root-context.xml"})
public class TestMember {
@Autowired
MemberController mc;
@Autowired
MemberDAO dao;
@Autowired
MemberService ms;
@Test
public void testServiceIns() {
assertNotNull(ms);
}
@Test
public void testIns() {
System.out.println("--- mc => " + mc);
assertNotNull(mc); // null이 아니면 성공
}
@Test
public void testDaoIns() {
assertNotNull(dao);
MemberDTO dto = new MemberDTO();
dto.setId(123);
dto.setName("testDTO");
dao.insertMember(dto);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.web.root"/>
</beans>