SpringBoot/day50 / 23.11.15(수) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

허니몬·2023년 11월 16일
0

P11_JUnit_Mybatis


JUnit.txt

# 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.txt

# 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"/>

root-context.xml

<?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>

com.web.root.member....


MemberDTO

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;
	}
	
}

MemberController

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";
	}
	
	
}

MemberService

package com.web.root.member.service;

import com.web.root.member.dto.MemberDTO;

public interface MemberService {
	public void insertMember(MemberDTO dto);
}

MemberServiceImpl

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);
	}

}

MemberDAO

package com.web.root.member.dao;



import com.web.root.member.dto.MemberDTO;
public interface MemberDAO {
	
	public void insertMember(MemberDTO dto);
}

memberMapper.xml

<?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>

index.jsp

<%@ 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>

insertView.jsp

<%@ 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>

src/test/....


테스트 테이블 생성


-- JUnit 테스트 테이블
CREATE TABLE mybatis(
id NUMBER(4),
name VARCHAR2(20)
);

desc mybatis;

select * from mybatis;

TestMember

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);
	}
}


testMember.xml

<?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>
profile
Fintech

0개의 댓글