JUnitとは、Javaの単体テストを自動的に実行するためのオープンソースのフレームワークです。繰り返しテストが実行できるように設計されています。JUnitには、次のような4つの特徴があります。
テストクラスにテスト用のメソッドを実装して利用します。テスト対象とテストプログラムを分離できるため、テスト対象への影響がなくなります。
複数のテストプログラムをまとめることができ、まとめたテストを一度にテストすることもできます。再作成にかかる手間を軽減し、テスト工程を効率的に消化できます。
テストの結果が瞬時に表示されるため、テストを評価する負荷がなくなります。
JUnit単体でも利用可能ですが、EclipseなどのIDEと連携することもできます。それによって、テストコードの作成を高速化させることもできます。最近のEclipseでは、JUnitが同梱して提供されています。
実際に、サンプルアプリケーションのソースコードを用意して、JUnitでテストしてみましょう。Eclipseに同梱されているJUnit 3を使います。今回も連載第2回「Strutsの常識を知り、EclipseとTomcatの環境構築」と同様に、「PKG」ワークスペースを使用します。
まず、「PKG」に「Struts Testcase」を組み込みます。Struts TestcaseはJUnitを拡張して、Struts上でテストができるフレームワークです。
「Struts Testcase for JUnit」へアクセスして、「strutstest214-1.2_2.2.zip」をダウンロードします。「strutstest214-1.2_2.2.zip」を解凍して、「strutstest」フォルダのstrutstest-2.1.4.jarを「PKG/WEB-INF/lib」配下にコピーして、準備完了です。
次に、「/PKG/pages」配下に下記の.jspファイルを用意してください。
<%@ page contentType="text/html; charset=Shift-JIS" %>
<%@ taglib uri="http://struts.apache.org/tags-html"
prefix="html" %>
<html:html>
<head>
<title>JUnitテスト用入力画面</title>
</head>
<html:form action="/JUnit">
<table border="0">
<html:errors/>
<tr><td>
<h2>JUnitテスト用入力</h2>
あなたの誕生日を8桁の数字で入力してください。</br>
生年月日:<html:text property="seireki_ymd" size="15" maxlength="8" />
</td></tr>
<tr><td>
<p><html:submit value="OK" /></p>
</td></tr>
</table>
</html:form>
</html:html>
<%@ page contentType="text/html; charset=MS932" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<html:html>
<head>
<title>JUnitテスト用結果画面</title>
</head>
<html:form action="/JUnit">
<table>
<tr><td>
<h2>JUnitテスト用結果</h2>
あなたの誕生日は、<br>
<bean:write name="JUnitForm" property="wareki_ymd" />なんですね!<br>
<logic:equal name="JUnitForm" property="todayflg" value="1">
<h2>おめでとうございます。</h2>
</logic:equal>
<logic:notEqual name="JUnitForm" property="todayflg" value="1">
<h2>誕生日にはお祝いのお言葉を送ります。</h2>
</logic:notEqual>
</td></tr>
</table>
</html:form>
</html:html>
次に、「/PKG/WEB-INF/src」配下に下記の.javaファイルを作成します。
package junit.form;
import org.apache.struts.action.ActionForm;
/**
* JUnitForm.java
*/
public class JUnitForm extends ActionForm {
private String seireki_ymd;
private String wareki_ymd;
private int todayflg = 0;
/**
*
* @return seireki_ymd
*/
public String getSeireki_ymd() {return seireki_ymd;}
/**
* @param seireki_ymd
*/
public void setSeireki_ymd(String seireki_ymd) {this.seireki_ymd = seireki_ymd;}
/**
* @return wareki_ymd
*/
public String getWareki_ymd() {return wareki_ymd;}
/**
* @param wareki_ymd
*/
public void setWareki_ymd(String wareki_ymd) {this.wareki_ymd = wareki_ymd;}
/**
* @return todayflg
*/
public int getTodayflg() {return todayflg;}
/**
* @param todayflg
*/
public void setTodayflg(int todayflg) {this.todayflg = todayflg;}
}
package junit;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import junit.form.JUnitForm;
import org.apache.struts.action.*;
/**
* JUnitAction.java
*/
public class JUnitAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
HttpSession session = request.getSession(true);
JUnitForm junitForm = (JUnitForm) form;
// 西暦8けた取得
String s_ymd = junitForm.getSeireki_ymd();
// 西暦 → 和暦変換
junitForm.setWareki_ymd(getDateStoW(s_ymd));
// 現在日を取得
String today =getToday();
// 現在日が誕生日であるとき
if(today.substring(5).equals(junitForm.getWareki_ymd().substring(5))){
junitForm.setTodayflg(1);
}else{
junitForm.setTodayflg(0);
}
session.setAttribute("JunitForm", junitForm);
return mapping.findForward("success");
}
/**
* 西暦 → 和暦変換処理
* @param String
* @return ymd
*/
public static String getDateStoW(String s_ymd){
// 起点日の文字列を数値に変換する
int year = Integer.parseInt(s_ymd.substring(0,4));
// 年号取得処理
String s_year = Nengo(year,s_ymd);
// 年月日の結合
String w_year = s_year + "年" + s_ymd.substring(4,6) + "月" + s_ymd.substring(6) + "日";
return w_year;
}
/**
* 現在日取得
* @return w_year
*/
public static String getToday(){
//サーバの日付け取得
Date sysDate = Calendar.getInstance().getTime();
//年号比較用の日付けフォーマット処理
SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
int i_year = Integer.parseInt(formatter.format(sysDate));
// 結合用の日付けフォーマット処理
String year = new SimpleDateFormat("yyyy").format(sysDate);
String month = new SimpleDateFormat("MM").format(sysDate);
String day = new SimpleDateFormat("dd").format(sysDate);
// 年号取得処理
year = Nengo(i_year,year+month+day);
// 年月日の結合
String ymd = year +"年" + month + "月" + day + "日";
return ymd;
}
/**
* 年号取得処理
* @param int
* @return year
*/
public static String Nengo(int i_year , String ymd){
String year ="";
// 年号の振り分け
if(Integer.parseInt(ymd) > 19120729 && Integer.parseInt(ymd) < 19261225){
year = "大正" + String.valueOf(i_year - 1911);
}else if(Integer.parseInt(ymd) > 19261224 && Integer.parseInt(ymd) < 19890108){
year = "昭和" + String.valueOf(i_year - 1925);
}else if(Integer.parseInt(ymd) > 19890107){
year = "平成" + String.valueOf(i_year - 1988);
}
return year;
}
}
最後に「/PKG/WEB-INF」配下のstruts-config.xmlファイルを編集します。
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- ================================================ Form Bean Definitions -->
<form-beans>
<form-bean name="HelloForm" type="hello.form.HelloForm" />
<!-- ここから追加 -->
<form-bean name="JUnitForm" type="junit.form.JUnitForm" />
<!-- ここまで追加 -->
</form-beans>
<!-- ========================================= Global Exception Definitions -->
<global-exceptions>
</global-exceptions>
<!-- =========================================== Global Forward Definitions -->
<global-forwards>
</global-forwards>
<!-- =========================================== Action Mapping Definitions -->
<action-mappings>
<action
attribute="HelloForm"
input="/pages/Who.jsp"
name="HelloForm"
path="/hello"
type="hello.HelloAction"
scope="session"
validate="true">
<forward name="success" path="/pages/Hello.jsp" />
</action>
<!-- ここから追加 -->
<action
attribute="JUnitForm"
input="/pages/JUnit_Input.jsp"
name="JUnitForm"
path="/JUnit"
type="junit.JUnitAction"
scope="session"
validate="true">
<forward name="success" path="/pages/JUnit_Result.jsp" />
</action>
<!-- ここまで追加 -->
</action-mappings>
<!-- ====================================== Message Resources Definitions -->
<!-- ============================================= Plug Ins Configuration -->
<!-- ======================================================= Tiles plugin -->
<!-- =================================================== Validator plugin -->
</struts-config>
これで、テストをする準備は完了です。次ページからは、JUnitAction.javaのJUnitのテストクラスを、Eclipseを使用して作成していきます。JUnitのテストメソッドも16個紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.