본문 바로가기
Java Web Programming/6. Spring | MyBatis

[SpringMVC/MyBatis] Junit을 이용한 Spring MVC Template - 단위테스트

by 파프리카_ 2020. 11. 11.
728x90
반응형

[ JUnit ]

: JUnit은 자바용 단위 테스트 작성을 위한 산업 표준 프레임워크다.


환경설정 참고

 

[SpringMVC/MyBatis] Spring MVC Project 환경설정

[ 환경 설정 ] 1. Spring Legacy Project 프로젝트 생성 > 'Spring MVC Project' 선택 > 프로젝트 명 작성 (작성한 프로젝트 이름이 실제 브라우저상 보이는 서버프로그램 url 이 된다 *주로 프로젝트 명을 쓴다..

creamilk88.tistory.com


Maven pom 설정 

 

> Junit 라이브러리 추가 : SpringMVC Project 생성 시, 자동으로 pom.xml에 있다!

<!-- Test : Junit (단위테스트) -->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>

 

/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.kosta</groupId>
	<artifactId>myapp</artifactId>
	<name>myapp</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>4.3.14.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	</properties>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>

		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>

		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<!-- Test : Junit (단위테스트) -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		
		<!-- 라이브러리 추가 -->
		
		<!-- spring junit -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- dbcp , mybatis -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.1.1</version>
		</dependency>

		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.0</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.0</version>
		</dependency>

		<!-- ajax , json -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.8.3</version>
		</dependency>

		<!-- aop -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.8.9</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-eclipse-plugin</artifactId>
				<version>2.9</version>
				<configuration>
					<additionalProjectnatures>
						<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
					</additionalProjectnatures>
					<additionalBuildcommands>
						<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
					</additionalBuildcommands>
					<downloadSources>true</downloadSources>
					<downloadJavadocs>true</downloadJavadocs>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<compilerArgument>-Xlint:all</compilerArgument>
					<showWarnings>true</showWarnings>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>exec-maven-plugin</artifactId>
				<version>1.2.1</version>
				<configuration>
					<mainClass>org.test.int1.Main</mainClass>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

DD (Deploytment Descriptor) 설정 - init-param tag 추가

 

/WEB_INF/web.xml 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>myapp</display-name>
  <welcome-file-list>
  	<!-- controller를 거쳐야만 jsp가 동작되도록한다 -->
    <welcome-file>index.do</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- init-param 태그 추가
    	 : Spring 설정 파일이 다수일 경우, 
    	   SerlvetConfig init param을 전달하여,
    	   Spring 설정을 로딩하게 한다.
     -->
    <init-param>
    	<param-name>contextConfigLocation</param-name>
    	<param-value>/WEB-INF/spring-*.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <!-- request에 대한 한글처리 -->
  <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

Spring configure 설정 - spring 설정이 여러개 !

 

spring설정을 model과 web으로 구분하여 분리

 

* namespace에서 'context' 체크

* typeAliasesPackage 설정 시, project명을 기재해주어 경로설정에 주의한다.

 

/WEB_INF/spring-model.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 http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
	<!-- 1. DBCP 설정 -->
	<bean id="dbcp" class="org.apache.commons.dbcp2.BasicDataSource">
		<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
		<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe"/>
		<property name="username" value="scott"/>
		<property name="password" value="tiger"/>
	</bean>
	
	<!--2. SqlSessionFactory 설정 -->
	<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- DBCP(datebase connection pool) 주입 -->
		<property name="dataSource" ref="dbcp"/>
		<!-- MyBatis에서 쓸 mapper loation(path) 주입 -->
		<property name="mapperLocations" value="classpath:/mybatis/config/*.xml"/>
		<!-- Package에 별칭주기 
		 	 : project명을 기재해주어 경로설정에 주의한다.-->
		<property name="typeAliasesPackage" value="org.kosta.myapp.model"/>
		<!-- underScore 표기법을 Camel 표기법으로 mapping(변환)해주는 설정 -->
		<property name="configuration">
			<bean class="org.apache.ibatis.session.Configuration">
				<property name="mapUnderscoreToCamelCase" value="true"></property>
			</bean>
		</property>
	</bean>

	<!--3. SqlSessionTemplate설정 : 트랜잭션 제어를 지원-->
	<bean id="SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactoryBean"/>
	</bean>
	
	<!--4. IOC 설정 : <context:component-scan> :  IOC, DI, DL에 대한 설정-->
	<context:component-scan base-package="org.kosta"></context:component-scan>

</beans>

 

* namespace에서 'mvc' 체크

/WEB_INF/spring-web.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:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<!--5. SpringMVC 설정-->
	<mvc:annotation-driven/>

	<!--6. ViewResolver 설정 : client에게 응답하는 view에 대한 설정 -->
	<bean id="ViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/"/>
		<property name="suffix" value=".jsp"/>
	</bean>

</beans>

MyBatis 설정 - mapper (/mybatis.config)

 

src/main/resource/mybatis.config/item.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Sql Mapper -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="item">

	<!-- 1. 전체 회원 수 조회 -->
 	<select id="getItemCount" resultType="int">
 		SELECT COUNT(*)
 		FROM   spring_item
 	</select>
 	
	<!-- 2. item_no로 ItemVO 조회 -->
	<select id="findItemByNo" resultType="itemVO">
		SELECT item_no, item_name, maker, price
		FROM   spring_item
		WHERE  item_no=#{value}
	</select>
	
	<!-- 3. 아이템 등록 후, 등록된 ItemVO 조회 -->
	<insert id="registerItem" parameterType="itemVO">
		<!-- itemVO 객체의 itemNo에 nextval을 할당해준다. -->
		<selectKey keyProperty="itemNo" resultType="string" order="BEFORE">
			SELECT spring_item_seq.nextval
			FROM   dual
		</selectKey> 
		INSERT INTO spring_item (item_no, item_name, maker, price)
		VALUES (#{itemNo}, #{itemName}, #{maker}, #{price})
	</insert>
</mapper>

Log4j 설정 파일 -- 자동으로 생성된다.

 

/src/main/resources

 

*선언부 수정해주기

<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

 

/log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	
	<!-- Application Loggers -->
	<logger name="org.kosta.myapp">
		<level value="warn" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="warn" />
	</logger>
	
	<logger name="org.springframework.beans">
		<level value="warn" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="warn" />
	</logger>

	<logger name="org.springframework.web">
		<level value="warn" />
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="warn" />
		<appender-ref ref="console" />
	</root>
	
</log4j:configuration>

SQL

 

spring_item 테이블


Model

 

/src/main/java/org.kosta.myapp.model

 

/ItemVO.java 

package org.kosta.myapp.model;

public class ItemVO {
	private String itemNo;
	private String itemName;
	private String maker;
	private int price;
	
	public ItemVO() {
		super();
	}

	public ItemVO(String itemNo, String itemName, String maker, int price) {
		super();
		this.itemNo = itemNo;
		this.itemName = itemName;
		this.maker = maker;
		this.price = price;
	}

	public String getItemNo() {
		return itemNo;
	}

	public void setItemNo(String itemNo) {
		this.itemNo = itemNo;
	}

	public String getItemName() {
		return itemName;
	}

	public void setItemName(String itemName) {
		this.itemName = itemName;
	}

	public String getMaker() {
		return maker;
	}

	public void setMaker(String maker) {
		this.maker = maker;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	@Override
	public String toString() {
		return "ItemVO [itemNo=" + itemNo + ", itemName=" + itemName + ", maker=" + maker + ", price=" + price + "]";
	}
	
}

/ItemDAO.java <<interface>>

package org.kosta.myapp.model;

public interface ItemDAO {

	int getItemCount();

	ItemVO findItemByNo(String itemNo);

	void registerItem(ItemVO vo);

}

 

/ItemDAOImpl.java

package org.kosta.myapp.model;

import javax.annotation.Resource;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class ItemDAOImpl implements ItemDAO {
	@Resource
	private SqlSessionTemplate template;

	public ItemDAOImpl(SqlSessionTemplate template) {
		super();
		this.template = template;
	}
	
	// 1. 전체 회원 수 조회
	@Override
	public int getItemCount() {
		return template.selectOne("item.getItemCount");
	}
	
	// 2. item_no로 ItemVO 조회
	@Override
	public ItemVO findItemByNo(String itemNo) {
		return template.selectOne("item.findItemByNo", itemNo);
	}
	
	// 3. 아이템 등록
	@Override
	public void registerItem(ItemVO vo) {
		template.insert("item.registerItem", vo);
	}

}

View

 

/WEB-INF/views

 

* 모든 jsp파일들을 WEB-INF안에 둠으로써 클라이언트에서 바로 접근하는 것을 방지한다.

why? FrontController는 모든 요청에 대한 진입점을 FrontController(DispatcherSerlvet)으로 전송한다. 

이를 정확하게 지키기 위해 이렇게 구조를 잡는다.

그렇기에 기존의 방식대로 한다면, 클라이언트의 요청이 DispatcherSerlvet을 거치지 않고,

서버에 바로 접근을 하게 되어 보안상 좋지 않다.

이를 해결하기 위해서 클라이언트에게 보여지는 모든 응답을

반드시 DispatcherSerlvet로만 접근하도록 하여(WEB-INF로 응답 화면을 감춘다-ecansulation), 보안성을 높인다. 

 

/index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
	<h4>SpringMVC home</h4>
	
	<!-- 1. 전체 회원 수 조회 -->
	총 인원 수 : ${requestScope.itemCount}
	<br><br>
	
	<!-- 2. item_no로 ItemVO 조회 -->
	<form action="findItemByNo.do">
		item_no : <input type="number" name="itemNo" required="required">
		<input type="submit" value="검색">
	</form><br>
	
	<!-- 3. 아이템 등록 화면으로 이동-->
	<a href="registerItemView.do">아이템 등록</a>

	
</body>
</html>

 

/findbyid_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>findbyid_result</title>
</head>
<body>
	<a href="index.do">Home</a><br><br>
	아이템 검색 결과 <br>
	${itemVO}
</body>
</html>

 

아이템 등록 화면

/register_item.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>아이템 등록 폼</title>
</head>
<body>
	<form action="registerItem.do" method="POST">
		이름 <input type="text" name="itemName" required="required"><br>
		제조사 <input type="text" name="maker" required="required"><br>
		가격 <input type="number" name="price" required="required"><br>
		<input type="submit" value="등록"><br>
	</form>
</body>
</html>

 

아이템 등록 결과 화면

/register_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>아이템 등록 폼</title>
</head>
<body>
	<!-- 4. 아이템 등록 
	      : 서버에 영향을 주는 request이기 때문에 POST방식으로 전송한다-->
	<form action="registerItem.do" method="POST">
		이름 <input type="text" name="itemName" required="required"><br>
		제조사 <input type="text" name="maker" required="required"><br>
		가격 <input type="number" name="price" required="required"><br>
		<input type="submit" value="등록"><br>
	</form>
</body>
</html>

Controller

 

/src/main/java/org.kosta.myapp.controller

 

/HomeController.java

package org.kosta.myapp.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {
	
	//index.jsp 실행
	@RequestMapping("index.do")
	public String home() {
		//spring-web.xml의 viewResolver 설정에 의해 응답
		return "index"; // /WEB-INF/views/index.jsp가 응답
	}
}

 

/ItemController.java

package org.kosta.myapp.controller;

import javax.annotation.Resource;

import org.kosta.myapp.model.ItemDAO;
import org.kosta.myapp.model.ItemVO;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller //Component
public class ItemController {
	
	@Resource //DI
	ItemDAO itemDAO;
	
	// 2. 아이디로 상품 정보 찾기
	@RequestMapping("findItemByNo.do")
	public String findItemByNo(String itemNo, Model model) {
		model.addAttribute("itemVO", itemDAO.findItemByNo(itemNo));
		return "findbyid_result";
	}
	
	// 3. 아이템 등록 화면으로 이동
	@RequestMapping("registerItemView.do")
	public String registerItemView() {
		return "register_item";
	}
	
	// 4. 아이템 등록
	@PostMapping("registerItem.do")
	public String registerItem(ItemVO vo) {
		itemDAO.registerItem(vo);
		//재동작(새로고침) 시, 재동작되지 않도록 redirect로 처리한다.
		return "redirect:registerItemResult.do?itemNo="
				+ vo.getItemNo();
	}
	
	// 4_1. 아이템 등록 시, 등록된 아이템 정보 보내기
	@RequestMapping("registerItemResult.do")
	public ModelAndView registerItemResult(String itemNo) {
		return new ModelAndView("register_result",
				"ivo", itemDAO.findItemByNo(itemNo));
	}
}

Test - 단위 테스트

 

/src/test/java/org.kosta.myapp

// JUnit에 red or green 결과가 나온다
Assert.assertEquals([기대값], [실제값])

// JUnit에 not null이라 확신되는 것을 적어 red or green 결과를 본다.
Assert.assertNotNull([확신값]);

 

/TestJUnit.java

package org.kosta.myapp;

import static org.junit.Assert.assertEquals;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.kosta.myapp.model.ItemDAO;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.junit.Assert;

@RunWith(SpringJUnit4ClassRunner.class)
//객체 테스트이기 때문에, <context:component-scan>이 있는 spring-model을 지정한다.
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring-model.xml"})
public class TestJUnit {
	
	@Resource
	ItemDAO itemDAO;
	
	//@Test annotaion을 표시해준다.
	@Test
	public void itemCountTest() {
		//System.out.println(itemDAO.getItemCount());
		//Assert.assertEquals([기대값], [실제값])
		Assert.assertEquals(1, itemDAO.getItemCount()); //red
		Assert.assertEquals(4, itemDAO.getItemCount()); //green
		Assert.assertNotNull(itemDAO.findItemByNo("7"));
	}
}

 

> TestUnit.java > Run as > JUnit Test  

   * src/test/resource/log4j.xml은 info 단위로 출력되도록 했다.

 

>Assert.assertEquals(1, itemDAO.getItemCount()); 실행 시 -- false

 

>Assert.assertEquals(4, itemDAO.getItemCount()); 실행 시 --true


[ 결과 ]

 

> 홈화면 (index.jsp)

> item_no를 입력하면, findbyid_result.jsp가 작동된다.

   * HOME을 누르면 index.jsp로 이동한다. 

 

> '아이템 등록'을 클릭하면, reigster_item.jsp가 작동되어 폼이 제공된다.

 

 

>  '등록'을 누르면, register_result.jsp가 동작되며, 등록한 아이템의 정보가 제공된다.

728x90
반응형