可以在 JUnit 中可編程地使用 DbUnit,或者可以將它作為構建過程的一部分使用。該框架帶有一個 Ant 任務,該任務提供了一種使用 XML 文件來操作、導出或比較數據庫中數據的方法。例如,清單 3 演示了 dbunit 任務,在本文的例子中,該任務將測試數據插入到目標數據庫中,然后在運行完所有組件測試后刪除數據:
清單 3. 在 Ant 中運行組件測試
<target name="component-tests"> <mkdir dir="${logs.junit.dir}" /> <taskdef name="dbunit" classname="org.dbunit.ant.DbUnitTask"/> <dbunit driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/brewery" userid="${db.username.system}" classpathref="db.lib.path" password="${db.password.system}"> <operation type="INSERT" src="seedFile.xml"/> </dbunit> <junit fork="yes" haltonfailure="false" failureproperty="tests.failed" haltonerror="true" dir="${basedir}" printsummary="yes"> <classpath refid="test.class.path" /> <classpath refid="project.class.path"/> <formatter type="plain" usefile="true" /> <formatter type="xml" usefile="true" /> <batchtest fork="yes" todir="${logs.junit.dir}"> <fileset dir="${test.component.dir}"> <patternset refid="test.sources.pattern"/> </fileset> </batchtest> </junit> <mkdir dir="${reports.junit.dir}" /> <junitreport todir="${reports.junit.dir}"> <fileset dir="${logs.junit.dir}"> <include name="TEST-*.xml" /> <include name="TEST-*.txt" /> </fileset> <report format="frames" todir="${reports.junit.dir}" /> </junitreport> <dbunit driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/brewery" classpathref="db.lib.path" userid="${db.username.system}" password="${db.password.system}"> <operation type="DELETE" src="seedFile.xml"/> </dbunit> </target> |
正如清單 3 所示,現在組件測試可在執行期間依賴駐留在數據庫中的特定數據。另外,由于在所有測試成功執行后刪除了所有的數據,因而此過程現在可重復執行。
在數據庫中播種
可以將 dbunit 任務的 INSERT 和 DELETE 操作類型和一個種子文件起使用,該文件包含表示數據庫表和相關行的 XML 元素。例如,清單 4 是清單 3 中引用的 seedFile.xml 文件的內容。每個 BEER 元素表示一個也叫 BEER 的數據庫表,BEER 元素的每個屬性和其值都映射至相應的數據庫列名稱和值。
清單 4. DbUnit 種子文件
<?xml version='1.0' encoding='UTF-8'?> <dataset> <BEER id='6' beer_name='Guinness Extra Stout' brewer='St.James Brewery' date_received='2007-02-01' /> <BEER id='7' beer_name='Smuttynose Robust Porter' brewer='Smuttynose Brewery' date_received='2007-02-01' /> <BEER id='8' beer_name='Wolavers pale ale' brewer='Wolaver Brewery' date_received='2007-02-01' /> </dataset> |
您也許已經從清單 3 中注意到,可以在不同的操作中重用 DbUnit 的種子文件。在本文的例子中,將在運行組件測試前使用清單 4 中的文件在數據庫中播種,然后使用相同的文件指示測試完成時從數據庫中刪除哪些數據。
回頁首
參與性能測試
開發人員完成編碼后,常常要經過很長時間才執行性能測試,而事實通常是可以在開發周期中更早的時候發現(并且解決)性能問題。幸運地是,有一種方法可解決此問題:持續測試或更具體地、持續地運行 JUnitPerf 測試。
對性能測試來說 JUnitPerf 是完美的
JUnitPerf 是一個同 JUnit 協調工作的框架,該框架在一個預定的時間限制內執行測試用例:如果一個測試中的方法所用的時間比預期的閾值長,則認為該測試是失敗的。通過將性能測試集成到自動化構建中,您能有效地監控應用程序的性能甚至能在出現性能問題時使構建失敗。
但我傾向于將 JUnitPerf 用作一種發現早期性能問題的簡單方法,而不是將其作為一種機制來衡量執行時間;像 profilers 這樣的工具更善于提供此類衡量。在本質上,可以認為 JUnitPerf 是一個早期的警告系統。
原文轉自:http://www.ibm.com/developerworks/cn/java/j-ap03137/index.html