package com.confrage; import static org.junit.Assert.fail; import java.io.File; import java.io.FileInputStream; import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.util.List; import java.util.Objects; import mockit.Deencapsulation; import org.dbunit.DefaultDatabaseTester; import org.dbunit.IDatabaseTester; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; import org.dbunit.dataset.Column; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.ITable; import org.dbunit.dataset.excel.XlsDataSet; import org.junit.After; import org.junit.Before; public abstract class AbstractDBUnit{ /** DBUnit用コネクション */ private IDatabaseConnection dbConnection = null; /** DBUnit用データベーステスター */ private IDatabaseTester tester = null; /** * ベースファイルのパス */ protected final String baseFile = "./src/com/confrage/baseFile.xlsx"; /** * JDBCコネクションを取得します * @return connection コネクション * @throws Exception 例外 */ private Connection getJDBCConnection() throws Exception { String path = "jdbc:oracle:thin:@localhost:1521:XE"; String id = "USER002"; String pw = "USER002"; Connection connection = DriverManager.getConnection(path, id, pw); connection.setAutoCommit(false); return connection; } /** * DBUnit用コネクションを取得します * @return IDatabaseConnection DBUnit用コネクション * @throws Exception 例外 */ protected IDatabaseConnection getConnection() throws Exception { if (dbConnection == null || dbConnection.getConnection().isClosed()) { Connection jdbcConnection = getJDBCConnection(); dbConnection = new DatabaseConnection(jdbcConnection, jdbcConnection.getSchema()); } return dbConnection; } /** * IDatabaseTesterを取得します * @return IDatabaseTester データベーステスター * @throws Exception 例外 */ protected IDatabaseTester getDatabaseTester() throws Exception { if (this.tester == null) { this.tester = new DefaultDatabaseTester(getConnection()); } return this.tester; } /** * テストメソッド前のsetupを実行します */ @Before public void setUp() throws Exception { final IDatabaseTester databaseTester = getDatabaseTester(); databaseTester.setDataSet(getDataSet()); databaseTester.onSetup(); } /** * IDataSetを取得します * */ protected IDataSet getDataSet() throws Exception { return new XlsDataSet(new FileInputStream(new File(baseFile))); } /** * テストメソッド後のtearDownを実行します */ @After public void tearDown() throws Exception { if (!dbConnection.getConnection().isClosed()) { try { final IDatabaseTester databaseTester = getDatabaseTester(); databaseTester.onTearDown(); } finally { tester = null; } dbConnection.getConnection().close(); dbConnection.close(); } } /** * DTOリストを検証します * @param dirPath * @param fileName * @param sheetName * @param dtoList */ protected void assertDTO(String dirPath, String fileName, String sheetName, List dtoList) { try { FileInputStream fis = new FileInputStream(new File(dirPath, fileName)); IDataSet dataSet = new XlsDataSet(fis); ITable table = dataSet.getTable(sheetName); Column[] cols = table.getTableMetaData().getColumns(); // 行数検証 if (table.getRowCount() != dtoList.size()) { fail("期待値と実効値の行数が異なります。\r\n" + "期待値:" + String.valueOf(table.getRowCount()) + "\r\n" + "実効値:" + String.valueOf(dtoList.size()) + "\r\n"); } for (int row = 0; row < table.getRowCount(); row++) { D dto = dtoList.get(row); for(Column col :cols) { // 期待値 Object expectedObj = table.getValue(row, col.getColumnName()); // 実効値 Object actualObj = Deencapsulation.getField(dto, col.getColumnName()); // 比較 boolean isEqual = false; if (expectedObj != null && actualObj != null && actualObj instanceof BigDecimal) { // BigDecimalで比較 BigDecimal expected = new BigDecimal(String.valueOf(expectedObj)); BigDecimal actual = (BigDecimal) actualObj; isEqual = actual.compareTo(expected) == 0; } else { // Stringで比較 String expected = expectedObj == null ? null : String.valueOf(expectedObj); String actual = actualObj == null ? null : String.valueOf(actualObj); isEqual = Objects.equals(actual, expected); } if (!isEqual) { // 期待値と実効値が異なる場合 fail(Integer.toString(row + 1) + "行目:フィールド" + col.getColumnName() + "\r\n" + "期待値:" + String.valueOf(expectedObj) + "\r\n" + "実効値:" + String.valueOf(actualObj) + "\r\n"); } } } } catch (AssertionError ex) { throw ex; } catch (Exception ex) { ex.printStackTrace(); throw new RuntimeException("DTOリスト検証エラー"); } } }

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント