package jp.terasoluna.fw.file.dao.standard; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import org.junit.Test; import org.springframework.test.util.ReflectionTestUtils; import jp.terasoluna.fw.file.dao.FileException; import jp.terasoluna.fw.file.dao.FileLineException; import org.mockito.Mockito; /** * {@link jp.terasoluna.fw.file.dao.standard.PlainFileLineIterator} クラスのテスト。 * <p> * <h4>【クラスの概要】</h4> ファイル行オブジェクトを用いないファイル読込クラス。 * <p> * @see jp.terasoluna.fw.file.dao.standard.PlainFileLineIterator */ public class PlainFileLineIteratorTest { /** * testPlainFileLineIterator01() <br> * <br> * (正常系) <br> * 観点:E <br> * <br> * 入力値:(引数) PlainFileLineIterator01.txt<br> * データを持たないファイルのパス<br> * (引数) clazz:PlainFileLineIterator_Stub01<br> * @FileFormatの設定有り、すべて初期値。<br> * (引数) columnParserMap:以下の要素を持つMap<String, ColumnParser>インスタンス<br> * ・"java.lang.String"=NullColumnParserインスタンス<br> * <br> * 期待値:(状態変化) AbstractFileLineIterator#AbstractFileLineIterator():1回呼び出されることを確認する。<br> * 呼び出されるときの引数が、引数fileName,clazz,columnParserMapと同じインスタンスであること<br> * (状態変化) AbstractFileLineIterator#init():1回呼び出されること。<br> * <br> * 親クラスのコンストラクタが呼ばれ、親クラスのinitメソッドが実行されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testPlainFileLineIterator01() throws Exception { // テスト対象のインスタンス化 // コンストラクタの試験なので不要 // 引数の設定 URL url = this.getClass().getResource("PlainFileLineIterator01.txt"); String fileName = url.getPath(); Class<PlainFileLineIterator_Stub01> clazz = PlainFileLineIterator_Stub01.class; Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); // 前提条件の設定 // なし // テスト実施 PlainFileLineIterator result = Mockito.spy( new PlainFileLineIterator(fileName, clazz, columnParserMap)); // 返却値の確認 // なし // 状態変化の確認 // 判定 assertEquals(fileName, ReflectionTestUtils.getField(result, "fileName")); assertSame(clazz, ReflectionTestUtils.getField(result, "clazz")); assertSame(columnParserMap, ReflectionTestUtils.getField(result, "columnParserMap")); } /** * testSeparateColumns01() <br> * <br> * (異常系) <br> * 観点:G <br> * <br> * 入力値:(引数) fileLineString:Stringインスタンス<br> * <br> * 期待値:(状態変化) 例外:UnSupportedOperationException<br> * メッセージ:"separateColumns(String) isn't supported."<br> * <br> * このクラスではseparateColumnsをサポートしていない。よって、UnSupportedOperationExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testSeparateColumns01() throws Exception { // テスト対象のインスタンス化 URL url = this.getClass().getResource("PlainFileLineIterator01.txt"); String fileName = url.getPath(); Class<PlainFileLineIterator_Stub01> clazz = PlainFileLineIterator_Stub01.class; Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator plainFileLineIterator = new PlainFileLineIterator(fileName, clazz, columnParserMap); // 引数の設定 String fileLineString = "aaa"; // 前提条件の設定 // なし // テスト実施 try { plainFileLineIterator.separateColumns(fileLineString); fail("UnSupportedOperationExceptionがスローされませんでした"); } catch (UnsupportedOperationException e) { // 返却値の確認 // なし // 状態変化の確認 // 判定 assertSame(UnsupportedOperationException.class, e.getClass()); assertEquals("separateColumns(String) isn't supported.", e .getMessage()); } } /** * testNext01() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(状態) 対象ファイル:以下の内容を持つ"PlainFileLineIterator_next01.txt"ファイルが存在する。<br> * -------------------<br> * 1行目データ<br> * -------------------<br> * ※特殊データ<br> * (状態) this.readTrailer:false<br> * <br> * 期待値:(戻り値) String:Stringインスタンス<br> * (readLineの結果)<br> * (状態変化) AbstractFileLineIterator#readLine():1回呼ばれる<br> * (状態変化) currentLineCount:1<br> * <br> * hasNextメッソドがTRUEになっている場合readLineメッソドが呼ばれることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testNext01() throws Exception { // テスト対象のインスタンス化 URL url = this.getClass().getResource("PlainFileLineIterator01.txt"); String fileName = url.getPath(); Class<PlainFileLineIterator_Stub01> clazz = PlainFileLineIterator_Stub01.class; Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator plainFileLineIterator = Mockito.spy( new PlainFileLineIterator(fileName, clazz, columnParserMap)); // 引数の設定 // なし // 前提条件の設定 // なし // テスト実施 String result = plainFileLineIterator.next(); // 返却値の確認 assertEquals("Line data 1", result); // 状態変化の確認 Mockito.verify(plainFileLineIterator).readLine(); assertEquals(1, ReflectionTestUtils.getField(plainFileLineIterator, "currentLineCount")); } /** * testNext02() <br> * <br> * (異常系) <br> * 観点:F.G <br> * <br> * 入力値:(状態) 対象ファイル:以下の内容を持つ"PlainFileLineIterator_next02.txt"ファイルが存在する。<br> * -------------------<br> * 空<br> * -------------------<br> * ※特殊データ<br> * (状態) this.readTrailer:false<br> * <br> * 期待値:(状態変化) AbstractFileLineIterator#readLine():呼ばれない<br> * (状態変化) currentLineCount:0<br> * (状態変化) 例外:以下の情報を持つFileLineExceptionが発生することを確認する。<br> * ・メッセージ:"The data which can be acquired doesn't exist."<br> * ・原因例外:NoSuchElementException<br> * ・ファイル名:フィールドfileNameと同じインスタンス。<br> * ・行番号:0<br> * ・カラム名:null<br> * ・カラムインデックス:-1<br> * <br> * hasNextメッソドがFALSEになっている場合<br> * NoSuchElementExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testNext02() throws Exception { // テスト対象のインスタンス化 URL url = this.getClass().getResource("File_Empty.txt"); String fileName = url.getPath(); Class<PlainFileLineIterator_Stub01> clazz = PlainFileLineIterator_Stub01.class; Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator plainFileLineIterator = Mockito.spy( new PlainFileLineIterator(fileName, clazz, columnParserMap)); // 引数の設定 // なし // 前提条件の設定 // なし // テスト実施 try { plainFileLineIterator.next(); fail("FileLineExceptionがスローされませんでした"); } catch (FileLineException e) { // 返却値の確認 // なし assertSame(FileLineException.class, e.getClass()); assertEquals("The data which can be acquired doesn't exist.", e .getMessage()); assertSame(NoSuchElementException.class, e.getCause().getClass()); assertEquals(fileName, e.getFileName()); assertEquals(1, e.getLineNo()); assertNull(e.getColumnName()); assertEquals(-1, e.getColumnIndex()); // 状態変化の確認 Mockito.verify(plainFileLineIterator, Mockito.never()).readLine(); assertEquals(0, ReflectionTestUtils.getField(plainFileLineIterator, "currentLineCount")); } } /** * testNext03() <br> * <br> * (異常系) <br> * 観点:F.G <br> * <br> * 入力値:(状態) 対象ファイル:以下の内容を持つ"PlainFileLineIterator_next03.txt"ファイルが存在する。<br> * -------------------<br> * 1行目データ<br> * 2行目データ<br> * -------------------<br> * ※特殊データ<br> * (状態) this.readTrailer:true<br> * <br> * 期待値:(状態変化) AbstractFileLineIterator#readLine():呼ばれない<br> * (状態変化) currentLineCount:0<br> * (状態変化) 例外:以下の情報を持つFileLineExceptionが発生することを確認する。<br> * ・メッセージ:"Data part should be called before trailer part."<br> * ・原因例外:IllegalStateException<br> * ・ファイル名:フィールドfileNameと同じインスタンス。<br> * ・行番号:0<br> * <br> * hasNextメッソドがFALSEになっている場合<br> * NoSuchElementExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testNext03() throws Exception { // テスト対象のインスタンス化 URL url = this.getClass().getResource("PlainFileLineIterator03.txt"); String fileName = url.getPath(); Class<PlainFileLineIterator_Stub03> clazz = PlainFileLineIterator_Stub03.class; Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator plainFileLineIterator = Mockito.spy( new PlainFileLineIterator(fileName, clazz, columnParserMap)); // 引数の設定 // なし // 前提条件の設定 ReflectionTestUtils.setField(plainFileLineIterator, "readTrailer", true); // テスト実施 try { plainFileLineIterator.next(); fail("FileLineExceptionがスローされませんでした"); } catch (FileLineException e) { // 返却値の確認 // なし assertSame(FileLineException.class, e.getClass()); assertEquals("Data part should be called before trailer part.", e .getMessage()); assertSame(IllegalStateException.class, e.getCause().getClass()); assertEquals(fileName, e.getFileName()); assertEquals(0, e.getLineNo()); // 状態変化の確認 Mockito.verify(plainFileLineIterator, Mockito.never()).readLine(); assertEquals(0, ReflectionTestUtils.getField(plainFileLineIterator, "currentLineCount")); } } /** * 正常系<br> * FileFormatのencloseCharとdelimiterが設定されていても、無視する * @throws Exception */ @Test public void testNext04() throws Exception { // テスト対象のインスタンス化 URL url = this.getClass().getResource("CsvFileLineIterator_next01.txt"); String fileName = url.getPath(); Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator fileLineIterator = new PlainFileLineIterator(fileName, PlainFileLineIterator_Stub02.class, columnParserMap); // テスト実施 String result1 = fileLineIterator.next(); String result2 = fileLineIterator.next(); String result3 = fileLineIterator.next(); // 返却値の確認 assertEquals("\"1\",22,333,|4444|", result1); assertEquals("\"5\",66,777,|8888|", result2); assertEquals("\"9\",AA,BBB,|CCCC|", result3); } /** * testSkipint01() <br> * <br> * (正常系) <br> * 観点:D,E,F <br> * <br> * 入力値:(引数) skipLines:0<br> * (状態) 対象ファイル:以下の内容を持つ"PlainFileLineIterator_skip01.txt"ファイルが存在する。<br> * -------------------<br> * 3行目データ<br> * -------------------<br> * (状態) this.readLine():正常実行<br> * (状態) this.currentLineCount:0<br> * <br> * 期待値:(状態変化) this.readLine:呼ばれない<br> * (状態変化) this.currentLineCount:0<br> * <br> * 正常パターン。<br> * Skip対象行がない場合、そのまま正常終了することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testSkipint01() throws Exception { // テスト対象のインスタンス化 URL url = PlainFileLineIteratorTest.class.getResource( "PlainFileLineIterator_skip01.txt"); String fileName = url.getPath(); Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator fileLineIterator = Mockito.spy( new PlainFileLineIterator(fileName, PlainFileLineIterator_Stub01.class, columnParserMap)); ReflectionTestUtils.setField(fileLineIterator, "currentLineCount", 0); // 引数の設定 int skipLines = 0; // 前提条件の設定 fileLineIterator.init(); // テスト対象のインスタンス化で設定済み // テスト実施 fileLineIterator.skip(skipLines); // 返却値の確認 // なし // 状態変化の確認 Mockito.verify(fileLineIterator, Mockito.never()).readLine(); // assertEquals(0, VMOUTUtil.getCallCount(AbstractFileLineIterator.class, // "readLine")); assertEquals(0, ReflectionTestUtils.getField(fileLineIterator, "currentLineCount")); } /** * testSkipint02() <br> * <br> * (正常系) <br> * 観点:D,E,F <br> * <br> * 入力値:(引数) skipLines:1<br> * (状態) 対象ファイル:以下の内容を持つ"PlainFileLineIterator_skip01.txt"ファイルが存在する。<br> * -------------------<br> * 3行目データ<br> * -------------------<br> * (状態) this.readLine():正常実行<br> * (状態) this.currentLineCount:0<br> * <br> * 期待値:(状態変化) this.readLine:1回呼ばれる<br> * (状態変化) this.currentLineCount:1<br> * <br> * 正常パターン。<br> * Skip対象行が1行の場合、対象データを1行読むことを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testSkipint02() throws Exception { // テスト対象のインスタンス化 URL url = AbstractFileLineIteratorTest.class.getResource( "PlainFileLineIterator_skip01.txt"); String fileName = url.getPath(); Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator fileLineIterator = Mockito.spy( new PlainFileLineIterator(fileName, PlainFileLineIterator_Stub01.class, columnParserMap)); ReflectionTestUtils.setField(fileLineIterator, "currentLineCount", 0); // 引数の設定 int skipLines = 1; // 前提条件の設定 fileLineIterator.init(); // テスト対象のインスタンス化で設定済み // テスト実施 fileLineIterator.skip(skipLines); // 返却値の確認 // なし // 状態変化の確認 Mockito.verify(fileLineIterator).readLine(); // assertEquals(1, VMOUTUtil.getCallCount(AbstractFileLineIterator.class, // "readLine")); assertEquals(1, ReflectionTestUtils.getField(fileLineIterator, "currentLineCount")); } /** * testSkipint03() <br> * <br> * (正常系) <br> * 観点:D,E,F <br> * <br> * 入力値:(引数) skipLines:3<br> * (状態) 対象ファイル:以下の内容を持つ"PlainFileLineIterator_skip01.txt"ファイルが存在する。<br> * -------------------<br> * 3行目データ<br> * -------------------<br> * (状態) this.readLine():正常実行<br> * (状態) this.currentLineCount:0<br> * <br> * 期待値:(状態変化) this.readLine:3回呼ばれる<br> * (状態変化) this.currentLineCount:3<br> * <br> * 正常パターン。<br> * Skip対象行が3行の場合、対象データを3行読むことを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testSkipint03() throws Exception { // テスト対象のインスタンス化 URL url = AbstractFileLineIteratorTest.class.getResource( "PlainFileLineIterator_skip01.txt"); String fileName = url.getPath(); Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator fileLineIterator = Mockito.spy( new PlainFileLineIterator(fileName, PlainFileLineIterator_Stub01.class, columnParserMap)); ReflectionTestUtils.setField(fileLineIterator, "currentLineCount", 0); // 引数の設定 int skipLines = 3; // 前提条件の設定 fileLineIterator.init(); // テスト対象のインスタンス化で設定済み // テスト実施 fileLineIterator.skip(skipLines); // 返却値の確認 // なし // 状態変化の確認 Mockito.verify(fileLineIterator, Mockito.times(3)).readLine(); // assertEquals(3, VMOUTUtil.getCallCount(AbstractFileLineIterator.class, // "readLine")); assertEquals(3, ReflectionTestUtils.getField(fileLineIterator, "currentLineCount")); } /** * testSkipint04() <br> * <br> * (異常系) <br> * 観点:G <br> * <br> * 入力値:(引数) skipLines:1<br> * (状態) 対象ファイル:以下の内容を持つ"PlainFileLineIterator_skip01.txt"ファイルが存在する。<br> * -------------------<br> * 3行目データ<br> * -------------------<br> * (状態) this.readLine():FileException例外を発生する。<br> * (状態) this.currentLineCount:0<br> * <br> * 期待値:(状態変化) this.currentLineCount:0<br> * (状態変化) なし:this.readLine()で発生したFileExceptionがそのままスローされることを確認する。<br> * <br> * 例外。<br> * 対象データを読む処理で例外が発生した場合、その例外がそのまま返されることを確認する。。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testSkipint04() throws Exception { // テスト対象のインスタンス化 URL url = AbstractFileLineIteratorTest.class.getResource( "PlainFileLineIterator_skip01.txt"); String fileName = url.getPath(); Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator fileLineIterator = Mockito.spy( new PlainFileLineIterator(fileName, PlainFileLineIterator_Stub01.class, columnParserMap)); ReflectionTestUtils.setField(fileLineIterator, "currentLineCount", 0); // 引数の設定 int skipLines = 1; // 前提条件の設定 fileLineIterator.init(); FileException exception = new FileException("readLineからの例外です"); Mockito.doThrow(exception).when(fileLineIterator).readLine(); // VMOUTUtil.setExceptionAtAllTimes(AbstractFileLineIterator.class, // "readLine", exception); // テスト対象のインスタンス化で設定済み // テスト実施 try { fileLineIterator.skip(skipLines); fail("FileExceptionがスローされませんでした"); } catch (FileException e) { // 例外の確認 assertSame(exception, e); // 状態変化の確認 assertEquals(0, ReflectionTestUtils.getField(fileLineIterator, "currentLineCount")); } } /** * testSkipint05() <br> * <br> * (異常系) <br> * 観点:G <br> * <br> * 入力値:(引数) skipLines:100<br> * ※処理対象ファイルの行数を超える設定<br> * (状態) 対象ファイル:以下の内容を持つ"PlainFileLineIterator_skip01.txt"ファイルが存在する。<br> * -------------------<br> * 3行目データ<br> * -------------------<br> * (状態) this.readLine():正常実行<br> * (状態) this.currentLineCount:0<br> * <br> * 期待値:(状態変化) this.readLine:3回呼ばれる<br> * (状態変化) this.currentLineCount:3<br> * (状態変化) なし:以下の設定を持つFileLineExceptionが発生する。<br> * ・メッセージ:"The data which can be acquired doesn't exist."<br> * ・原因例外:NoSuchElementException<br> * ・ファイル名:処理対象ファイル名<br> * ・行番号:4<br> * <br> * 例外。<br> * Skip対象行の数が対象データの数を越える場合、例外が発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testSkipint05() throws Exception { // テスト対象のインスタンス化 URL url = AbstractFileLineIteratorTest.class.getResource( "PlainFileLineIterator_skip01.txt"); String fileName = url.getPath(); Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator fileLineIterator = Mockito.spy( new PlainFileLineIterator(fileName, PlainFileLineIterator_Stub01.class, columnParserMap)); ReflectionTestUtils.setField(fileLineIterator, "currentLineCount", 0); // 引数の設定 int skipLines = 100; // 前提条件の設定 fileLineIterator.init(); // テスト実施 try { fileLineIterator.skip(skipLines); fail("FileLineExceptionがスローされませんでした"); } catch (FileLineException e) { // 例外の確認 assertEquals("The data which can be acquired doesn't exist.", e .getMessage()); assertTrue(NoSuchElementException.class.isAssignableFrom(e .getCause().getClass())); assertEquals(fileName, e.getFileName()); assertEquals(4, e.getLineNo()); // 状態変化の確認 Mockito.verify(fileLineIterator, Mockito.times(3)).readLine(); // assertEquals(3, VMOUTUtil.getCallCount( // AbstractFileLineIterator.class, "readLine")); assertEquals(3, ReflectionTestUtils.getField(fileLineIterator, "currentLineCount")); } } /** * testGetDelimiter01() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(状態) delimiter:'#'<br> * <br> * 期待値:(戻り値) char:','<br> * <br> * delimiterのgetterが正常に動作することを確認する。<br> * 必ず','が返却される。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testGetDelimiter01() throws Exception { // テスト対象のインスタンス化 URL url = this.getClass().getResource("PlainFileLineIterator01.txt"); String fileName = url.getPath(); Class<PlainFileLineIterator_Stub02> clazz = PlainFileLineIterator_Stub02.class; Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator plainFileLineIterator = new PlainFileLineIterator(fileName, clazz, columnParserMap); // 引数の設定 // なし // 前提条件の設定 // テスト対象のインスタンス化時に設定済み // テスト実施 char result = plainFileLineIterator.getDelimiter(); // 返却値の確認 assertEquals(',', result); // 状態変化の確認 // なし } /** * testGetEncloseChar01() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(状態) encloseChar:'\"'<br> * <br> * 期待値:(戻り値) char:Character.MIN_VALUE<br> * <br> * encloseCharのgetterが正常に動作することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testGetEncloseChar01() throws Exception { // テスト対象のインスタンス化 URL url = this.getClass().getResource("PlainFileLineIterator01.txt"); String fileName = url.getPath(); Class<PlainFileLineIterator_Stub02> clazz = PlainFileLineIterator_Stub02.class; Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator plainFileLineIterator = new PlainFileLineIterator(fileName, clazz, columnParserMap); // 引数の設定 // なし // 前提条件の設定 // テスト対象のインスタンス化時に設定済み // テスト実施 char result = plainFileLineIterator.getEncloseChar(); // 返却値の確認 assertEquals(Character.MIN_VALUE, result); // 状態変化の確認 // なし } /** * testGetCurrentLineCount01() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(状態) currentLineCount:5<br> * <br> * 期待値:(戻り値) int:5<br> * <br> * currentLineCountのgetterが正常に動作することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testGetCurrentLineCount01() throws Exception { // テスト対象のインスタンス化 URL url = this.getClass().getResource("PlainFileLineIterator01.txt"); String fileName = url.getPath(); Class<PlainFileLineIterator_Stub02> clazz = PlainFileLineIterator_Stub02.class; Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator plainFileLineIterator = new PlainFileLineIterator(fileName, clazz, columnParserMap); // 引数の設定 // なし // 前提条件の設定 ReflectionTestUtils.setField(plainFileLineIterator, "currentLineCount", 5); // テスト対象のインスタンス化時に設定済み // テスト実施 int result = plainFileLineIterator.getCurrentLineCount(); // 返却値の確認 assertEquals(5, result); // 状態変化の確認 // なし } /** * testGetTrailer01() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(状態) readTrailer:false<br> * <br> * 期待値:(戻り値) List<String>:super#getTrailer()の戻り値<br> * トレイラデータ<br> * (状態変化) readTrailer:true<br> * <br> * getTrailer()を呼ぶことによって、トレイラデータを取得し、トレイラ部処理確認用フラグがTrueに変化することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testGetTrailer01() throws Exception { // テスト対象のインスタンス化 URL url = this.getClass().getResource("PlainFileLineIterator03.txt"); String fileName = url.getPath(); Class<PlainFileLineIterator_Stub03> clazz = PlainFileLineIterator_Stub03.class; Map<String, ColumnParser> columnParserMap = new HashMap<String, ColumnParser>(); columnParserMap.put("java.lang.String", new NullColumnParser()); PlainFileLineIterator plainFileLineIterator = new PlainFileLineIterator(fileName, clazz, columnParserMap); // 引数の設定 // なし // 前提条件の設定 // テスト対象のインスタンス化時に設定済み // テスト実施 List<String> trailer = plainFileLineIterator.getTrailer(); // 返却値の確認 assertEquals(1, trailer.size()); assertEquals("trailer data", trailer.get(0)); // 状態変化の確認 assertTrue((Boolean) ReflectionTestUtils.getField(plainFileLineIterator, "readTrailer")); } }