package jp.terasoluna.fw.file.dao.standard;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
import org.mockito.Mockito;
/**
* {@link jp.terasoluna.fw.file.dao.standard.DateColumnParser} クラスのテスト。
* <p>
* <h4>【クラスの概要】</h4> 指定された文字列をパーズし、Date型に変換する。<br>
* 変換結果をファイル行オブジェクトのDate型の属性に値を格納する。
* <p>
* @see jp.terasoluna.fw.file.dao.standard.DateColumnParser
*/
public class DateColumnParserTest {
/**
* testParse01() <br>
* <br>
* (正常系) <br>
* 観点:C <br>
* <br>
* 入力値:(引数) column:"20060101"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:なし<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:null もしくは 空文字<br>
* (状態) map:要素なし<br>
* <br>
* 期待値:(状態変化) ファイル行オブジェクト(t)の属性:columnで設定した yyyyMMdd形式の文字列をDate型にパースした値<br>
* (状態変化) Map.get():メソッドが1回呼ばれる。<br>
* (状態変化) Map.put():メソッドが1回呼ばれる。<br>
* <br>
* 引数columnFormatがnullか空文字で、マップが空の場合、 フォーマット用のインスタンスがキャッシャされることを確認する。<br>
* ファイル行オブジェクトに、引数columnで設定した文字列を Date型にパースした値が設定できること。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse01() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "20060101";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Date.class });
String columnFormat = "";
// 前提条件の設定
Map<String, DateFormatLocal> map = Mockito.spy(
new ConcurrentHashMap<String, DateFormatLocal>());
ReflectionTestUtils.setField(dateColumnParser, "map", map);
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
// 返却値の確認
// なし
// 状態変化の確認
Object result = ReflectionTestUtils.getField(t, "a");
// 文字列からDate型に変換
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
simpleDateFormat.setLenient(false);
Date expected = simpleDateFormat.parse(column);
assertEquals(expected, result);
Mockito.verify(map).get(Mockito.anyString());
Mockito.verify(map).put(Mockito.anyString(), Mockito.any(
DateFormatLocal.class));
assertEquals(1, map.size());
assertNotNull(map.get("yyyyMMdd"));
}
/**
* testParse02() <br>
* <br>
* (正常系) <br>
* 観点:C <br>
* <br>
* 入力値:(引数) column:"20060101"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:なし<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:null もしくは 空文字<br>
* (状態) map:key:"yyyyMMdd"<br>
* value:new DateFormatLocal("yyyyMMdd")<br>
* <br>
* 期待値:(状態変化) ファイル行オブジェクト(t)の属性:columnで設定した yyyyMMdd形式の文字列をDate型にパースした値<br>
* (状態変化) Map.get():メソッドが1回呼ばれる。<br>
* (状態変化) Map.put():メソッドが呼ばれない。<br>
* <br>
* 引数columnFormatがnullか空文字で、マップに"yyyyMMdd"をキーにした キャッシュが存在する場合は、新たにキャッシュされないこと。<br>
* ファイル行オブジェクトに、引数columnで設定した文字列を Date型にパースした値が設定できること。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse02() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "20060101";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Date.class });
String columnFormat = "";
// 前提条件の設定
Map<String, DateFormatLocal> map = new ConcurrentHashMap<String, DateFormatLocal>();
DateFormatLocal cache = new DateFormatLocal("yyyyMMdd");
map.put("yyyyMMdd", cache);
map = Mockito.spy(map);
ReflectionTestUtils.setField(dateColumnParser, "map", map);
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
// 返却値の確認
// なし
// 状態変化の確認
Object result = ReflectionTestUtils.getField(t, "a");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
simpleDateFormat.setLenient(false);
Date expected = simpleDateFormat.parse(column);
assertEquals(expected, result);
Mockito.verify(map).get(Mockito.anyString());
Mockito.verify(map, Mockito.never()).put(Mockito.anyString(), Mockito
.any(DateFormatLocal.class));
assertEquals(1, map.size());
assertSame(cache, map.get("yyyyMMdd"));
}
/**
* testParse03() <br>
* <br>
* (正常系) <br>
* 観点:C <br>
* <br>
* 入力値:(引数) column:"20060101"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にある Date型属性のsetterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:なし<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:null もしくは 空文字<br>
* (状態) map:key:"yyyy-MM-dd"<br>
* value:new DateFormatLocal("yyyy-MM-dd")<br>
* <br>
* 期待値:(状態変化) ファイル行オブジェクト(t)の属性:columnで設定した yyyyMMdd形式の文字列をDate型にパースした値<br>
* (状態変化) Map.get():メソッドが1回呼ばれる。<br>
* (状態変化) Map.put():メソッドが1回呼ばれる。<br>
* <br>
* 引数columnFormatがnullか空文字で、マップに"yyyyMMdd"以外をキーにした キャッシュが存在する場合は、"yyyyMMdd"をキーにしたフォーマット用 インスタンスがキャッシュされること。<br>
* ファイル行オブジェクトに、引数columnで設定した文字列をDate型に パースした値が設定できること。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse03() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "20060101";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Date.class });
String columnFormat = "";
// 前提条件の設定
Map<String, DateFormatLocal> map = new ConcurrentHashMap<String, DateFormatLocal>();
DateFormatLocal cache = new DateFormatLocal("yyyy-MM-dd");
map.put("yyyy-MM-dd", cache);
map = Mockito.spy(map);
ReflectionTestUtils.setField(dateColumnParser, "map", map);
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
// 返却値の確認
// なし
// 状態変化の確認
Object result = ReflectionTestUtils.getField(t, "a");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
simpleDateFormat.setLenient(false);
Date expected = simpleDateFormat.parse(column);
assertEquals(expected, result);
Mockito.verify(map).get(Mockito.anyString());
Mockito.verify(map).put(Mockito.anyString(), Mockito.any(
DateFormatLocal.class));
assertEquals(2, map.size());
assertNotNull(map.get("yyyyMMdd"));
assertSame(cache, map.get("yyyy-MM-dd"));
}
/**
* testParse04() <br>
* <br>
* (正常系) <br>
* 観点:E, F <br>
* <br>
* 入力値:(引数) column:"2006-01-01"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:1つ<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:"yyyy-MM-dd"<br>
* (状態) map:要素なし<br>
* <br>
* 期待値:(状態変化) ファイル行オブジェクト(t)の属性:columnで設定した yyyy-MM-dd形式の文字列をDate型にパースした値<br>
* (状態変化) Map.get():メソッドが1回呼ばれる。<br>
* (状態変化) Map.put():メソッドが1回呼ばれる。<br>
* <br>
* 引数columnFormatにフォーマット用文字列が設定されており、 マップが空の場合は、columnFormatの文字列をキーにキャッシュされること。<br>
* ファイル行オブジェクトに、引数columnで設定した文字列をDate型に パースした値が設定できること。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse04() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "2006-01-01";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Date.class });
String columnFormat = "yyyy-MM-dd";
// 前提条件の設定
Map<String, DateFormatLocal> map = new ConcurrentHashMap<String, DateFormatLocal>();
map = Mockito.spy(map);
ReflectionTestUtils.setField(dateColumnParser, "map", map);
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
// 返却値の確認
// なし
// 状態変化の確認
Object result = ReflectionTestUtils.getField(t, "a");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
simpleDateFormat.setLenient(false);
Date expected = simpleDateFormat.parse(column);
assertEquals(expected, result);
Mockito.verify(map).get(Mockito.anyString());
Mockito.verify(map).put(Mockito.anyString(), Mockito.any(
DateFormatLocal.class));
assertEquals(1, map.size());
assertNotNull(map.get("yyyy-MM-dd"));
}
/**
* testParse05() <br>
* <br>
* (正常系) <br>
* 観点:E, F <br>
* <br>
* 入力値:(引数) column:"2006-01-01"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にある Date型属性のsetterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:1つ<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:"yyyy-MM-dd"<br>
* (状態) map:key:"yyyy-MM-dd"<br>
* value:new DateFormatLocal("yyyy-MM-dd")<br>
* <br>
* 期待値:(状態変化) ファイル行オブジェクト(t)の属性:columnで設定した yyyy-MM-dd形式の文字列をDate型にパースした値<br>
* (状態変化) Map.get():メソッドが1回呼ばれる。<br>
* (状態変化) Map.put():メソッドが呼ばれない。<br>
* <br>
* 引数columnFormatにフォーマット用文字列が設定されており、 マップにフォーマット用文字列をキーにしたキャッシュが存在する場合は、 新たにキャッシュされないこと。<br>
* ファイル行オブジェクトに、引数columnで設定した文字列をDate型に パースした値が設定できること。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse05() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "2006-01-01";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Date.class });
String columnFormat = "yyyy-MM-dd";
// 前提条件の設定
Map<String, DateFormatLocal> map = new ConcurrentHashMap<String, DateFormatLocal>();
DateFormatLocal cache = new DateFormatLocal(columnFormat);
map.put(columnFormat, cache);
map = Mockito.spy(map);
ReflectionTestUtils.setField(dateColumnParser, "map", map);
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
// 返却値の確認
// なし
// 状態変化の確認
Object result = ReflectionTestUtils.getField(t, "a");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
simpleDateFormat.setLenient(false);
Date expected = simpleDateFormat.parse(column);
assertEquals(expected, result);
Mockito.verify(map).get(Mockito.anyString());
Mockito.verify(map, Mockito.never()).put(Mockito.anyString(), Mockito
.any(DateFormatLocal.class));
assertEquals(1, map.size());
assertSame(cache, map.get("yyyy-MM-dd"));
}
/**
* testParse06() <br>
* <br>
* (正常系) <br>
* 観点:E, F <br>
* <br>
* 入力値:(引数) column:"2006-01-01"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:1つ<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:"yyyy-MM-dd"<br>
* (状態) map:key:"yyyy/MM/dd"<br>
* value:new DateFormatLocal("yyyy/MM/dd")<br>
* <br>
* 期待値:(状態変化) ファイル行オブジェクト(t)の属性:columnで設定した yyyy-MM-dd形式の文字列をDate型にパースした値<br>
* (状態変化) Map.get():メソッドが1回呼ばれる。<br>
* (状態変化) Map.put():メソッドが1回呼ばれる。<br>
* <br>
* 引数columnFormatにフォーマット用文字列が設定されており、 マップにフォーマット用文字列をキーにしたキャッシュが存在しない場合は、 キャッシュされること。<br>
* ファイル行オブジェクトに、引数columnで設定した文字列をDate型に パースした値が設定できること。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse06() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "2006-01-01";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Date.class });
String columnFormat = "yyyy-MM-dd";
// 前提条件の設定
Map<String, DateFormatLocal> map = new ConcurrentHashMap<String, DateFormatLocal>();
DateFormatLocal cache = new DateFormatLocal("yyyy/MM/dd");
map.put("yyyy/MM/dd", cache);
map = Mockito.spy(map);
ReflectionTestUtils.setField(dateColumnParser, "map", map);
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
// 返却値の確認
// なし
// 状態変化の確認
Object result = ReflectionTestUtils.getField(t, "a");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
simpleDateFormat.setLenient(false);
Date expected = simpleDateFormat.parse(column);
assertEquals(expected, result);
Mockito.verify(map).get(Mockito.anyString());
Mockito.verify(map).put(Mockito.anyString(), Mockito.any(
DateFormatLocal.class));
assertEquals(2, map.size());
assertSame(cache, map.get("yyyy/MM/dd"));
assertNotNull(map.get("yyyy-MM-dd"));
}
/**
* testParse07() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:"2006-01-01"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:1つ<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:formatできない文字列<br>
* (状態) map:要素なし<br>
* <br>
* 期待値:(状態変化) 例外:ParseExceptionが発生することを確認する。<br>
* <br>
* フォーマット文字列にありえない値が設定された場合、ParseExceptionが 発生することを確認する <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse07() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "2006-01-01";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Date.class });
String columnFormat = "yyyy-MM-dd-MM";
// 前提条件の設定
// デフォルトで要素なしmapを持つので、何もしない。
try {
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
fail("ParseExceptionがスローされました。");
} catch (ParseException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(ParseException.class, e.getClass());
assertEquals("Unparseable date: \"2006-01-01\"", e.getMessage());
}
}
/**
* testParse08() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:"2006-01-01"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:private<br>
* 引数:1つ<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:"yyyy-MM-dd"<br>
* (状態) map:要素なし<br>
* <br>
* 期待値:(状態変化) 例外:IllegalAccessExceptionが発生することを 確認する。<br>
* <br>
* ファイル行オブジェクトのDate型属性のsetterメソッドに アクセスできない場合、IllegalAccessExceptionをスローすることを確認する <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse08() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "2006-01-01";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod(
"setAPrivate", new Class[] { Date.class });
String columnFormat = "yyyy-MM-dd";
// 前提条件の設定
// デフォルトで要素なしmapを持つので、何もしない。
try {
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
fail("IllegalAccessExceptionがスローされませんでした。");
} catch (IllegalAccessException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(IllegalAccessException.class, e.getClass());
}
}
/**
* testParse09() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:"2006-01-01"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:例外をスローする<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:1つ<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:"yyyy-MM-dd"<br>
* (状態) map:要素なし<br>
* <br>
* 期待値:(状態変化) 例外:InvocationTargetExceptionが 発生することを確認する。<br>
* <br>
* ファイル行オブジェクトのDate型属性のsetterメソッドが例外を スローする場合、setterメソッドがスローした例外をラップする InvocationTargetExceptionをスローすることを確認する <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse09() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "2006-01-01";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod(
"setAException", new Class[] { Date.class });
String columnFormat = "yyyy-MM-dd";
// 前提条件の設定
// デフォルトで要素なしmapを持つので、何もしない。
try {
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
fail("InvocationTargetExceptionがスローされました。");
} catch (InvocationTargetException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(InvocationTargetException.class, e.getClass());
}
}
/**
* testParse10() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:"2006-01-01"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:複数<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:"yyyy-MM-dd"<br>
* (状態) map:要素なし<br>
* <br>
* 期待値:(状態変化) 例外:IllegalArgumentExceptionが 発生することを確認する。<br>
* <br>
* ファイル行オブジェクトのDate型属性のsetterメソッドの引数が多数ある場合、 IllegalArgumentExceptionをスローすることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse10() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "2006-01-01";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod(
"setAAndB", new Class[] { Date.class, Date.class });
String columnFormat = "yyyy-MM-dd";
// 前提条件の設定
// デフォルトで要素なしmapを持つので、何もしない。
try {
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
fail("IllegalArgumentExceptionがスローされませんでした。");
} catch (IllegalArgumentException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(IllegalArgumentException.class, e.getClass());
}
}
/**
* testParse11() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:"2008-01-32"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:1つ<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:"yyyy-MM-dd"<br>
* (状態) map:要素なし<br>
* <br>
* 期待値:(状態変化) 例外:ParseExceptionが発生することを確認する。<br>
* <br>
* Date型の属性の値が想定されない日付の場合、 ParseExceptionが発生することを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse11() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "2008-01-32";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Date.class });
String columnFormat = "yyyy-MM-dd";
// 前提条件の設定
// デフォルトで要素なしmapを持つので、何もしない。
try {
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
fail("ParseExceptionがスローされませんでした。");
} catch (ParseException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(ParseException.class, e.getClass());
assertEquals("Unparseable date: \"2008-01-32\"", e.getMessage());
}
}
/**
* testParse12() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:null<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:1つ<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:"yyyy-MM-dd"<br>
* (状態) map:要素なし<br>
* <br>
* 期待値:(状態変化) 例外:NullPointerExceptionが 発生することを確認する。<br>
* <br>
* 引数columnにnullが設定された場合は、NullPointerExceptionが 発生することを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse12() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = null;
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Date.class });
String columnFormat = "yyyy-MM-dd";
// 前提条件の設定
// デフォルトで要素なしmapを持つので、何もしない。
try {
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
fail("NullPointerExceptionがスローされませんでした。");
} catch (NullPointerException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(NullPointerException.class, e.getClass());
}
}
/**
* testParse13() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:"20080101"<br>
* (引数) ファイル行オブジェクト<br>
* t:Date型のフィールドを持つ<br>
* 値:null<br>
* (引数) ファイル行オブジェクト(t)にあるDate型属性の setterメソッド<br>
* method:以下の設定をもつMethodインスタンス<br>
* 可視性:public<br>
* 引数:1つ<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:"yyyy-MM-dd"<br>
* (状態) map:要素なし<br>
* <br>
* 期待値:(状態変化) 例外:ParseExceptionが発生することを確認する。<br>
* <br>
* 引数のcolumnのフォーマットとフォーマット用の文字列が異なる場合は、 ParseExceptionが発生することを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse13() throws Exception {
// テスト対象のインスタンス化
DateColumnParser dateColumnParser = new DateColumnParser();
// 引数の設定
String column = "20080101";
DateColumnParser_Stub01 t = new DateColumnParser_Stub01();
Method method = DateColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Date.class });
String columnFormat = "yyyy-MM-dd";
// 前提条件の設定
// デフォルトで要素なしmapを持つので、何もしない。
try {
// テスト実施
dateColumnParser.parse(column, t, method, columnFormat);
fail("ParseExceptionがスローされませんでした。");
} catch (ParseException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(ParseException.class, e.getClass());
assertEquals("Unparseable date: \"20080101\"", e.getMessage());
}
}
}