package jp.terasoluna.fw.file.dao.standard;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
/**
* {@link jp.terasoluna.fw.file.dao.standard.IntColumnParser} クラスのテスト。
* <p>
* <h4>【クラスの概要】</h4> 指定された文字列をパーズし、int型に変換する。<br>
* 変換結果をファイル行オブジェクトのint型の属性に値を格納する。
* <p>
* @see jp.terasoluna.fw.file.dao.standard.IntColumnParser
*/
public class IntColumnParserTest {
/**
* testParse01() <br>
* <br>
* (正常系) <br>
* 観点:A <br>
* <br>
* 入力値:(引数) column:Stringインスタンス<br>
* "1"<br>
* (引数) ファイル行オブジェクト<br>
* t:ファイル行オブジェクトスタブ<br>
* (引数) ファイル行オブジェクト(t)にあるint型属性の setterメソッド<br>
* method:対象となるsetterメソッドの可視性がpublic<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:Stringインスタンス<br>
* ""<br>
* <br>
* 期待値:(状態変化) ファイル行オブジェクト(t)の属性:columnで設定した 文字列がintに変換されて格納される。<br>
* "1"<br>
* <br>
* ファイル行オブジェクトのint型属性に文字列を設定することができることを 確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse01() throws Exception {
// テスト対象のインスタンス化
IntColumnParser intColumnParser = new IntColumnParser();
// 引数の設定
String column = "1";
IntColumnParser_Stub01 t = new IntColumnParser_Stub01();
Method method = IntColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Integer.TYPE });
String columnFormat = "";
// 前提条件の設定
// なし
// テスト実施
intColumnParser.parse(column, t, method, columnFormat);
// 返却値の確認
// なし
// 状態変化の確認
Object result = ReflectionTestUtils.getField(t, "a");
assertEquals(1, result);
}
/**
* testParse02() <br>
* <br>
* (正常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:Stringインスタンス<br>
* "1"<br>
* (引数) ファイル行オブジェクト<br>
* t:ファイル行オブジェクトスタブ<br>
* (引数) ファイル行オブジェクト(t)にあるint型属性の setterメソッド<br>
* method:対象となるsetterメソッドの可視性がprivate<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:Stringインスタンス<br>
* ""<br>
* <br>
* 期待値:(状態変化) 例外:IllegalAccessExceptionが発生することを 確認する。<br>
* <br>
* ファイル行オブジェクトのint型属性のsetterメソッドにアクセスできない場合、 IllegalAccessExceptionをスローすることを確認する <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse02() throws Exception {
// テスト対象のインスタンス化
IntColumnParser intColumnParser = new IntColumnParser();
// 引数の設定
String column = "1";
IntColumnParser_Stub01 t = new IntColumnParser_Stub01();
Method method = IntColumnParser_Stub01.class.getDeclaredMethod(
"setAPrivate", new Class[] { Integer.TYPE });
String columnFormat = "";
// 前提条件の設定
// なし
// テスト実施
try {
intColumnParser.parse(column, t, method, columnFormat);
fail("IllegalAccessExceptionがスローされませんでした。");
} catch (IllegalAccessException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(IllegalAccessException.class, e.getClass());
}
}
/**
* testParse03() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:Stringインスタンス<br>
* "1"<br>
* (引数) ファイル行オブジェクト<br>
* t:ファイル行オブジェクトスタブ<br>
* (引数) ファイル行オブジェクト(t)にあるint型属性の setterメソッド<br>
* method:setterメソッドが例外をスローする<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:Stringインスタンス<br>
* ""<br>
* <br>
* 期待値:(状態変化) 例外:InvocationTargetExceptionが発生することを 確認する。<br>
* <br>
* ファイル行オブジェクトのint型属性のsetterメソッドが例外をスローする場合、 setterメソッドがスローした例外をラップするInvocationTargetExceptionを スローすることを確認する <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse03() throws Exception {
// テスト対象のインスタンス化
IntColumnParser intColumnParser = new IntColumnParser();
// 引数の設定
String column = "1";
IntColumnParser_Stub01 t = new IntColumnParser_Stub01();
Method method = IntColumnParser_Stub01.class.getDeclaredMethod(
"setAException", new Class[] { Integer.TYPE });
String columnFormat = "";
// 前提条件の設定
// なし
// テスト実施
try {
intColumnParser.parse(column, t, method, columnFormat);
fail();
} catch (InvocationTargetException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(InvocationTargetException.class, e.getClass());
}
}
/**
* testParse04() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:Stringインスタンス<br>
* "1"<br>
* (引数) ファイル行オブジェクト<br>
* t:ファイル行オブジェクトスタブ<br>
* (引数) ファイル行オブジェクト(t)にあるint型属性の setterメソッド<br>
* method:setterメソッドの引数が多数ある<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:Stringインスタンス<br>
* ""<br>
* <br>
* 期待値:(状態変化) 例外:IllegalArgumentExceptionが発生することを 確認する。<br>
* <br>
* ファイル行オブジェクトのint型属性のsetterメソッドの引数が多数ある場合、 IllegalArgumentExceptionをスローすることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse04() throws Exception {
// テスト対象のインスタンス化
IntColumnParser intColumnParser = new IntColumnParser();
// 引数の設定
String column = "1";
IntColumnParser_Stub01 t = new IntColumnParser_Stub01();
Method method = IntColumnParser_Stub01.class.getDeclaredMethod(
"setAAndB", new Class[] { Integer.TYPE, Integer.TYPE });
String columnFormat = "";
// 前提条件の設定
// なし
// テスト実施
try {
intColumnParser.parse(column, t, method, columnFormat);
// 判定
fail();
} catch (IllegalArgumentException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(IllegalArgumentException.class, e.getClass());
}
}
/**
* testParse05() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:整数以外の文字列<br>
* (引数) ファイル行オブジェクト<br>
* t:ファイル行オブジェクトスタブ<br>
* (引数) ファイル行オブジェクト(t)にあるint型属性の setterメソッド<br>
* method:対象となるsetterメソッドの可視性がpublic<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:Stringインスタンス<br>
* ""<br>
* <br>
* 期待値:(状態変化) 例外:NumberFormatExceptionが発生することを確認する。<br>
* <br>
* 引数の文字列が整数以外(int型に変換できない)の場合、 NumberFormatExceptionをスローすることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse05() throws Exception {
// テスト対象のインスタンス化
IntColumnParser intColumnParser = new IntColumnParser();
// 引数の設定
String column = "a";
IntColumnParser_Stub01 t = new IntColumnParser_Stub01();
Method method = IntColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Integer.TYPE });
String columnFormat = "";
// 前提条件の設定
// なし
// テスト実施
try {
intColumnParser.parse(column, t, method, columnFormat);
// 判定
fail();
} catch (NumberFormatException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(NumberFormatException.class, e.getClass());
}
}
/**
* testParse06() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) column:null<br>
* (引数) ファイル行オブジェクト<br>
* t:ファイル行オブジェクトスタブ<br>
* (引数) ファイル行オブジェクト(t)にあるint型属性のsetterメソッド<br>
* method:対象となるsetterメソッドの可視性がpublic<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:Stringインスタンス<br>
* ""<br>
* <br>
* 期待値:(状態変化) 例外:NumberFormatExceptionが発生することを確認する。<br>
* <br>
* 引数の文字列がnullの場合、NumberFormatExceptionをスローすることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse06() throws Exception {
// テスト対象のインスタンス化
IntColumnParser intColumnParser = new IntColumnParser();
// 引数の設定
String column = null;
IntColumnParser_Stub01 t = new IntColumnParser_Stub01();
Method method = IntColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Integer.TYPE });
String columnFormat = "";
// 前提条件の設定
// なし
// テスト実施
try {
intColumnParser.parse(column, t, method, columnFormat);
// 判定
fail();
} catch (NumberFormatException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(NumberFormatException.class, e.getClass());
}
}
/**
* testParse07() <br>
* <br>
* (正常系) <br>
* 観点:A <br>
* <br>
* 入力値:(引数) column:Stringインスタンス<br>
* "1"<br>
* (引数) ファイル行オブジェクト<br>
* t:ファイル行オブジェクトスタブ<br>
* (引数) ファイル行オブジェクト(t)にあるint型属性のsetterメソッド<br>
* method:対象となるsetterメソッドの可視性がpublic<br>
* (引数) フォーマット用の文字列<br>
* columnFormat:null<br>
* <br>
* 期待値:(状態変化) ファイル行オブジェクト(t)の属性:columnで設定した文字列がintに変換されて格納される。<br>
* "1"<br>
* <br>
* 引数のフォーマット用文字列がnullの場合、ファイル行オブジェクトのint型属性に文字列を設定することができることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testParse07() throws Exception {
// テスト対象のインスタンス化
IntColumnParser intColumnParser = new IntColumnParser();
// 引数の設定
String column = "1";
IntColumnParser_Stub01 t = new IntColumnParser_Stub01();
Method method = IntColumnParser_Stub01.class.getDeclaredMethod("setA",
new Class[] { Integer.TYPE });
String columnFormat = null;
// 前提条件の設定
// なし
// テスト実施
intColumnParser.parse(column, t, method, columnFormat);
// 返却値の確認
// なし
// 状態変化の確認
Object result = ReflectionTestUtils.getField(t, "a");
assertEquals(1, result);
}
}