Tuesday, May 17, 2005

DBUnit

ต่อจากเมื่อวานที่ได้ทดลองใช้ AppFuse ไป
จากการอ่าน 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 ข้อมูลเข้าไป

Related link from Roti

No comments: