2013年5月28日火曜日

JUnit DBUnit - 2

データはXML形式

テスト対象ソース AcceptOrderBean.java
import java.sql.*;

import java.util.ArrayList;

public class AcceptOrderBean {

private String o_num;
private String c_num;
private String p_num;
private int dc_rate;
private int option_price;
private String employee;
private Date accept_date;

public String getO_num() {
return o_num;
}

public String getC_num() {
return c_num;
}

public String getP_num() {
return p_num;
}

public int getDc_rate() {
return dc_rate;
}

public int getOption_price() {
return option_price;
}

public String getEmployee() {
return employee;
}

public Date getAccept_date() {
return accept_date;
}

public void setO_num(String o_num) {
this.o_num = o_num;
}

public void setC_num(String c_num) {
this.c_num = c_num;
}

public void setP_num(String p_num) {
this.p_num = p_num;
}

public void setDc_rate(int dc_rate) {
this.dc_rate = dc_rate;
}

public void setOption_price(int option_price) {
this.option_price = option_price;
}

public void setEmployee(String employee) {
this.employee = employee;
}

public void setAccept_date(Date date) {
this.accept_date = date;
}

private static Connection getConnection() throws Exception {
Class.forName(""com.mysql.jdbc.Driver"");
Connection connection = null;
// connection = DriverManager.getConnection(
// ""jdbc:mysql://localhost:3306/dbunit"", ""root"", """");
connection = DriverManager.getConnection(
""jdbc:mysql:///dbunit?useUnicode=true&charcterEncoding=UTF-8"",
""root"", """");
connection.setAutoCommit(false);
return connection;

}

public void loadByO_num(String o_num) throws Exception {

Connection connection = null;
try {
connection = getConnection();
connection.setAutoCommit(true);
String sql = ""select * from Accept_Order where o_num=?"";

PreparedStatement stat = connection.prepareStatement(sql);
stat.setString(1, o_num);
ResultSet result = stat.executeQuery();

if (result.next()) {
this.o_num = o_num;
this.c_num = result.getString(""c_num"");
this.p_num = result.getString(""p_num"");
this.dc_rate = result.getInt(""dc_rate"");
this.option_price = result.getInt(""option_price"");
this.employee = result.getString(""employee"");
this.accept_date = result.getDate(""accept_date"");
}

} finally {
if (connection != null)
connection.close();
}

}

public static AcceptOrderBean[] findByEmployee(String employee)
throws Exception {

Connection connection = null;
try {
connection = getConnection();
String sql = ""select * from Accept_Order where employee=?"";

PreparedStatement stat = connection.prepareStatement(sql);
stat.setString(1, employee);
ResultSet result = stat.executeQuery();
ArrayList list = new ArrayList();

while (result.next()) {
AcceptOrderBean accept = new AcceptOrderBean();
accept.o_num = result.getString(""o_num"");
accept.c_num = result.getString(""c_num"");
accept.p_num = result.getString(""p_num"");
accept.dc_rate = result.getInt(""dc_rate"");
accept.option_price = result.getInt(""option_price"");
accept.employee = result.getString(""employee"");
accept.accept_date = result.getDate(""accept_date"");
list.add(accept);
}

return (AcceptOrderBean[]) list.toArray(new AcceptOrderBean[list
.size()]);

} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
}
}

}

public void store() throws Exception {

Connection connection = null;
try {
connection = getConnection();
String sql = ""insert into Accept_Order values(?,?,?,?,?,?,?)"";

PreparedStatement stat = connection.prepareStatement(sql);
stat.setString(1, this.o_num);
stat.setString(2, this.c_num);
stat.setString(3, this.p_num);
stat.setInt(4, this.dc_rate);
stat.setInt(5, this.option_price);
stat.setString(6, this.employee);
stat.setDate(7, this.accept_date);
stat.executeUpdate();

connection.commit();

} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
}
}

}

public void delete() throws Exception {

Connection connection = null;
try {
connection = getConnection();
String sql = ""delete from Accept_Order where o_num=?"";

PreparedStatement stat = connection.prepareStatement(sql);
stat.setString(1, this.o_num);
stat.executeUpdate();

connection.commit();

} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
}
}

}

}


テストケース AcceptOrderBeanTest.java
import static org.junit.Assert.*;


import org.dbunit.Assertion;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.File;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Date;
import java.sql.DriverManager;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class AcceptOrderBeanTest extends AcceptOrderBean {

private File file;

private static Connection getConnection() throws Exception {
Class.forName(""com.mysql.jdbc.Driver"");
Connection connection = null;
// connection = DriverManager.getConnection(
// ""jdbc:mysql://localhost:3306/dbunit"", ""root"", """");
connection = DriverManager.getConnection(
""jdbc:mysql:///dbunit?useUnicode=true&charcterEncoding=UTF-8"",
""root"", """");
// テストソースではコミット宣言はデフォルトのままでよい。
// connection.setAutoCommit(false);
return connection;

}

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@SuppressWarnings(""deprecation"")
@Before
public void setUp() throws Exception {

IDatabaseConnection connection = null;
try {
Connection conn = getConnection();
connection = new DatabaseConnection(conn);

// 現状のバックアップを取得
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable(""ACCEPT_ORDER"");
file = File.createTempFile(""accept"", "".xml"");
FlatXmlDataSet.write(partialDataSet, new FileOutputStream(file));

// テストデータを投入する
IDataSet dataSet = new FlatXmlDataSet(new FileInputStream(
""C:/pleiades/workspace/dbtest/src/accept_order_data.xml""));
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (connection != null)
connection.close();
} catch (SQLException e) {
}
}

}

@SuppressWarnings(""deprecation"")
@After
public void tearDown() throws Exception {

IDatabaseConnection connection = null;
try {
Connection conn = getConnection();
connection = new DatabaseConnection(conn);

IDataSet dataSet = new FlatXmlDataSet(file);
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (connection != null)
connection.close();
} catch (SQLException e) {
}
}

}

@Test
public void testLoadByO_num() throws Exception {
// loadByO_numメソッドを実行
AcceptOrderBean order = new AcceptOrderBean();
order.loadByO_num(""5001"");

// 実行結果を確認

// 取得したAcceptOrderBeanの配列は「文字列」で比較する。

assertEquals(""accept_date=2004-01-01"",
""accept_date="" + order.getAccept_date());
assertEquals(""c_num=1000"", ""c_num="" + order.getC_num());
assertEquals(""dc_rate=5"", ""dc_rate="" + order.getDc_rate());
assertEquals(""employee=101"", ""employee="" + order.getEmployee());
assertEquals(""o_num=5001"", ""o_num="" + order.getO_num());
assertEquals(""option_price=30"",
""option_price="" + order.getOption_price());
assertEquals(""p_num=501"", ""p_num="" + order.getP_num());

}

@SuppressWarnings(""deprecation"")
@Test
public void testDelete() throws Exception {

// deleteメソッドを実行
AcceptOrderBean order = new AcceptOrderBean();
order.setO_num(""5003"");
order.delete();

// 実行結果を確認
IDatabaseConnection connection = null;
try {
// accept_orderテーブルの状態を確認
Connection conn = getConnection();
connection = new DatabaseConnection(conn);

IDataSet databaseDataSet = connection.createDataSet();
ITable actualTable = databaseDataSet.getTable(""accept_order"");

// あるべき姿を確認
IDataSet expectedDataSet = new FlatXmlDataSet(new FileInputStream(
""C:/pleiades/workspace/dbtest/src/accept_order_data3.xml""));
ITable expectedTable = expectedDataSet.getTable(""accept_order"");

// 比較する
Assertion.assertEquals(expectedTable, actualTable);
} finally {
if (connection != null)
connection.close();
}
}

@SuppressWarnings(""deprecation"")
@Test
public void testStore() throws Exception {

// storeメソッドの実行
AcceptOrderBean order = new AcceptOrderBean();
order.setO_num(""5004"");
order.setC_num(""1004"");
order.setP_num(""501"");
order.setDc_rate(20);
order.setOption_price(400);
order.setEmployee(""101"");
order.setAccept_date(Date.valueOf(""2004-01-03""));

order.store();

// 実行結果を検証する
IDatabaseConnection connection = null;
try {
// accept_orderテーブルの状態を確認
Connection conn = getConnection();
connection = new DatabaseConnection(conn);

IDataSet databaseDataSet = connection.createDataSet();
ITable actualTable = databaseDataSet.getTable(""accept_order"");

// 期待されるデータを取得
IDataSet expectedDataSet = new FlatXmlDataSet(new FileInputStream(
""C:/pleiades/workspace/dbtest/src/accept_order_data2.xml""));
ITable expectedTable = expectedDataSet.getTable(""accept_order"");

// 比較する
Assertion.assertEquals(expectedTable, actualTable);
} finally {
if (connection != null)
connection.close();
}

}



// @Test
public final void test() {

}
}

データ
<?xml version='1.0' encoding="UTF-8"?>
<dataset>
<ACCEPT_ORDER o_num="5001" c_num="1000" p_num="501" dc_rate="5"
option_price="30" employee="101" accept_date="2004-01-01" />
<ACCEPT_ORDER o_num="5002" c_num="1001" p_num="502" dc_rate="10"
option_price="20" employee="104"
accept_date="2004-02-02" />
<ACCEPT_ORDER o_num="5003" c_num="1002" p_num="503" dc_rate="15"
option_price="10" employee="101" accept_date="2004-01-31" />
</dataset>


<?xml version='1.0' encoding="UTF-8"?>
<dataset>
<ACCEPT_ORDER o_num="5001" c_num="1000" p_num="501" dc_rate="5"
option_price="30" employee="101" accept_date="2004-01-01" />
<ACCEPT_ORDER o_num="5002" c_num="1001" p_num="502" dc_rate="10"
option_price="20" employee="104"
accept_date="2004-02-02" />
<ACCEPT_ORDER o_num="5003" c_num="1002" p_num="503" dc_rate="15"
option_price="10" employee="101" accept_date="2004-01-31" />
<ACCEPT_ORDER o_num="5004" c_num="1004" p_num="501" dc_rate="20"
option_price="400" employee="101" accept_date="2004-01-03" />
</dataset>


<?xml version='1.0' encoding="UTF-8"?>
<dataset>
  <ACCEPT_ORDER o_num="5001" c_num="1000" p_num="501" dc_rate="5"
  option_price="30" employee="101" accept_date="2004-01-01" />
  <ACCEPT_ORDER o_num="5002" c_num="1001" p_num="502" dc_rate="10"
  option_price="20" employee="104"
  accept_date="2004-02-02" />
</dataset>