จากการอ่าน tutorial ทำให้รู้ว่า AppFuse ใช้
DBUnit เป็นตัว setup database สำหรับ
การ run testcase
สมัยก่อนผมใช้ ant task ที่ชื่อ <sql>
ในการ setup database ก่อนที่จะทำ
test case โดยใช้ผ่าน ant ดังนี้
<sql
driver="org.postgresql.Driver"
url="jdbc:postgresql://${test.host.address}:${test.port}/${test.database}?charSet=MS874"
userid="postgres"
password="xxxxx"
autocommit="true"
classpathref="maven.dependency.classpath"
onerror="continue"
encoding="MS874"
>
<fileset dir="src/test/sql">
<include name="serverSetup.sql"/>
</fileset>
</sql>
ในส่วนของ DBUnit ก็สามารถใช้ผ่าน ant เหมือนกัน
(หรืออาจะใช้ api ตรงๆใน testcase ก็ได้)
โดยมีวิธีใช้ดังนี้
<dbunit driver="${database.driver_class}"
supportBatchStatement="false"
url="${database.url}"
userid="${database.username}"
password="${database.password}">
<operation type="${operation}" src="${file}" format="xml"/>
</dbunit>
สิ่งที่แตกต่างกันก็คือถ้าเราใช้ sql task
เราจะต้องเตรียม data ด้วยคำสั่ง sql
ส่วนใน dbunit สามารถเตรียม dataset ใน
format xml ได้
กรณี fomat XmlDataSet
<?xml version="1.0" encoding="utf-8"?>
<dataset>
<table name='user_role'>
<column>username</column>
<column>role_name</column>
<row>
<value>tomcat</value>
<value>tomcat</value>
</row>
<row>
<value>mraible</value>
<value>admin</value>
</row>
</table>
</dataset>
กรณี format FlatXmlDataSet
<!DOCTYPE dataset SYSTEM "my-dataset.dtd">
<dataset>
<user_role username="tomcat"
role_name="tomcat"/>
</dataset>
สังเกตุว่าใน DBUnit Task จะมี Attribute operation
โดยเราสามารถระบุ operation ได้ดังนี้
- UPDATE DBUnit จะตั้ง assumption ว่ามี data อยู่ใน Database แล้ว
โดยพยายามจะนำ dataset ที่เตรียมไว้ไป update - INSERT ใช้ assumption ว่า ยังไม่มี table อยู่ใน Database
- DELETE DBUnit จะ delete ข้อมูลใน table เฉพาะ
ที่อยู่ใน dataset - DELETE_ALL delete ข้อมูลทุก row
สำหรับ table ที่มีชื่ออยู่ใน DataSet - REFRESH ถ้า data มีอยู่แล้วใช้ update
แต่ถ้ายังไม่มีใช้ insert - CLEAN_INSERT DBUnit จะ delete all
ก่อนที่จะ insert ข้อมูลเข้าไป
No comments:
Post a Comment