[英]Change TestListener for Unitils DbUnitModule
我正在嘗試使用Unitils來協助我進行數據庫測試。 我想使用Unitils / DBMaintain功能禁用約束。 但是,這有一些問題。 我不想使用DBMaintain為我創建數據庫,但是我希望使用其約束禁用功能。 我可以通過使用下面列出的自定義模塊來實現此目的:
public class DisableConstraintModule implements Module {
private boolean disableConstraints = false;
public void afterInit() {
if (disableConstraints) {
DatabaseUnitils.disableConstraints();
}
}
public void init(Properties configuration) {
disableConstraints = PropertyUtils.getBoolean("Database.disableConstraints", false, configuration);
}
}
這部分地解決了我想要的問題,但是我希望只能對將在測試中使用的表禁用約束。 我的測試將針對具有多個模式的數據庫運行,每個模式都有數百個不同的表。 DatabaseUnitils.disableConstraints()禁用每個模式中每個表的約束,這將非常耗時並且不必要。
在搜索dbmaintain代碼后,我發現Db2Database類確實包含一個用於禁用基於特定模式和表名的約束的函數,但是此方法受到了保護。 我可以通過擴展Db2Database類或使用反射來訪問它。
接下來,我需要確定我感興趣的架構和表。我可以通過觀察@DataSet批注來確定,這些架構和表基於xml中的內容來確定哪些是重要的。 為了做到這一點,我需要重寫TestListener,以便可以在嘗試插入數據集之前指示它使用xml禁用約束。 這是我的嘗試:
public class DisableConstraintModule extends DbUnitModule {
private boolean disableConstraints = false;
private TableBasedConstraintsDisabler disabler;
public void afterInit() {
}
public void init(Properties configuration) {
disableConstraints = PropertyUtils.getBoolean("Database.disableConstraints", false, configuration);
PropertyUtils.getInstance("org.unitils.dbmaintainer.structure.ConstraintsDisabler.implClassName", configuration);
}
public void disableConstraintsForDataSet(MultiSchemaDataSet dataSet) {
disabler.disableConstraints(dataSet);
}
protected class DbUnitCustomListener extends DbUnitModule.DbUnitListener {
@Override
public void beforeTestSetUp(Object testObject, Method testMethod) {
disableConstraintsForDataSet(getDataSet(testMethod, testObject));
insertDataSet(testMethod, testObject);
}
}
}
這是我想做的,但是我無法獲取@DataSet批注來觸發我的DbUnitCustomListener,而是調用了默認的DBUnitModule DbUnitListener。 無論如何,在使用@DataSet批注時,是否有我要覆蓋哪個偵聽器被調用的方法?或者是否有更好的方法共同禁用針對DB2數據庫的特定模式和表級別的約束?
謝謝
您必須告訴Unitils使用DbUnitModule的子類。 您可以使用unitils.properties文件中的unitils.module.dbunit.className屬性來執行此操作。 聽起來您已經了解了這一部分。
第二部分是重寫DbUnitModule的getTestListener()以便返回您的自定義偵聽器。
看到這個職位的一個例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.