Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 1st, 2012  |  syntax: None  |  size: 3.54 KB  |  hits: 24  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. package dbunitsample;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.net.MalformedURLException;
  8. import java.sql.Connection;
  9. import java.sql.DriverManager;
  10. import java.sql.SQLException;
  11.  
  12. import org.dbunit.Assertion;
  13. import org.dbunit.DatabaseUnitException;
  14. import org.dbunit.database.AmbiguousTableNameException;
  15. import org.dbunit.database.DatabaseConnection;
  16. import org.dbunit.database.IDatabaseConnection;
  17. import org.dbunit.database.QueryDataSet;
  18. import org.dbunit.dataset.DataSetException;
  19. import org.dbunit.dataset.IDataSet;
  20. import org.dbunit.dataset.ITable;
  21. import org.dbunit.dataset.xml.FlatXmlDataSet;
  22. import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
  23. import org.dbunit.operation.DatabaseOperation;
  24. import org.junit.After;
  25. import org.junit.Before;
  26. import org.junit.Test;
  27.  
  28.  
  29. public class MembersTest {
  30.        
  31.         private String testDataDir = "test_data";
  32.  
  33.        
  34.         private Connection getMyConnection() throws ClassNotFoundException, SQLException{
  35.                 Class.forName("com.ibm.db2.jcc.DB2Driver");
  36.                
  37.                 return DriverManager.getConnection(
  38.                                 "jdbc:db2://localhost:50000/SAMPLE"
  39.                                 , "db2inst1"
  40.                                 , "password"
  41.                 );
  42.         }
  43.  
  44.        
  45.         private IDataSet readDataSetFromXMLFile(String path) throws MalformedURLException, DataSetException{
  46.                 return new FlatXmlDataSetBuilder().build(new File(path));
  47.         }
  48.  
  49.        
  50.         private void escapeTable(String tableName, String path)
  51.                         throws DatabaseUnitException, AmbiguousTableNameException,
  52.                         IOException, DataSetException, FileNotFoundException,
  53.                         ClassNotFoundException, SQLException {
  54.                 Connection con = getMyConnection();
  55.                 File file = new File(path); // プロジェクトのルートからのパスで作成
  56.  
  57.                 QueryDataSet queryDataSet = new QueryDataSet(new DatabaseConnection(con));
  58.                 queryDataSet.addTable(tableName);
  59.                 FlatXmlDataSet.write(queryDataSet, new FileOutputStream(file));
  60.         }
  61.  
  62.        
  63.         @Before
  64.         public void setUp() throws Exception {
  65.                 // テーブルのデータを退避
  66.                 escapeTable("MEMBERS", testDataDir + "/escaped_members.xml" );
  67.         }
  68.  
  69.  
  70.         @After
  71.         public void tearDown() throws Exception {
  72.                 IDataSet dataSet = readDataSetFromXMLFile( testDataDir + "/escaped_members.xml");
  73.                 Connection con = getMyConnection();
  74.                
  75.                 // テーブルのデータをすべて削除して退避したデータを戻す
  76.                 DatabaseOperation.CLEAN_INSERT.execute(new DatabaseConnection(con), dataSet);
  77.                
  78.                 con.close();
  79.         }
  80.  
  81.  
  82.         @Test
  83.         public void testUpdate() throws DatabaseUnitException, SQLException, FileNotFoundException, ClassNotFoundException, MalformedURLException{
  84.                 Connection con = null;
  85.                 IDatabaseConnection dbcon = null;
  86.                 try{
  87.                         con = getMyConnection();
  88.                         dbcon = new DatabaseConnection(con);
  89.  
  90.                         // テストデータをロード
  91.                         IDataSet testDataSet = readDataSetFromXMLFile(testDataDir
  92.                                         + "/test_update.xml");
  93.  
  94.                         // テーブルのデータを全て消去+テストデータ投入
  95.                         DatabaseOperation.CLEAN_INSERT.execute(dbcon, testDataSet);
  96.  
  97.                         // 更新処理(テスト対象のメソッド)
  98.                         new Memebers().update();
  99.  
  100.                         // 期待値データをロード
  101.                         IDataSet expectedDataSet = readDataSetFromXMLFile(testDataDir
  102.                                         + "/test_update_expected.xml");
  103.                         ITable expectedTable = expectedDataSet.getTable("MEMBERS");
  104.  
  105.                         // DBのテーブルからデータを取得
  106.                         IDataSet actualDataSet = dbcon.createDataSet();
  107.                         ITable actualTable = actualDataSet.getTable("MEMBERS");
  108.  
  109.                         // 期待値と実際の値を比較
  110.                         Assertion.assertEquals(expectedTable, actualTable);
  111.                        
  112.                 } finally {
  113.                         if (dbcon != null) {
  114.                                 dbcon.close();
  115.                         }
  116.                         if (con != null) {
  117.                                 con.close();
  118.                         }
  119.                 }
  120.         }
  121. }