[英]How to revert the database back to the initial state using dbUnit?
我是自動化測試和dbUnit的新手。 所以我很感激你的建議。
我將創建一個測試套件,它將以下列方式運行:
直到那里它看起來不錯,但我不明白的是,如何在測試運行后將數據庫恢復到STATE0並更改數據?
我可以用dbUnit做到嗎?
還是別的什么?
我應該在每次測試之前重新創建數據庫嗎?
簡單的不在測試中提交事務對我來說是不合適的,因為測試最終會運行多個事務,可能不止一個數據庫連接。
DBUnit的可以,如果你寫你自動完成的工作相關的四個你@BeforeClass
, @Before
和@After
方法正確。 例如,在我們的項目中,使用Derby,就像一個這樣的測試用例
public class MyTest {
protected static IDataSet getDataSet() throws Exception {
URL url = MyTest.class.getClassLoader().getResource("MyDataSet.xml");
return new XmlDataSet(new FileInputStream(url.getPath()));
}
private static JdbcDatabaseTester databaseTester;
@BeforeClass
public static void setUpClass() throws Exception {
// Init test environment, session etc.
databaseTester = new JdbcDatabaseTester(
"org.apache.derby.jdbc.ClientDriver",
"jdbc:derby://localhost:1527/myschema",
"username", "password");
databaseTester.setDataSet(getDataSet());
}
@AfterClass
public static void tearDownClass() {
// Close session etc.
}
@Before
public void setUp() throws Exception {
databaseTester.onSetup();
}
@After
public void tearDown() throws Exception {
databaseTester.onTearDown();
}
@Test
public void test() throws Exception { ... }
}
此代碼在每次測試后將數據庫模式的(子集)放回到MyDataSet.xml
定義的狀態。 (注意,正如@Pascal評論的那樣,重置可能並不總是滿的 - 如果測試修改了不在數據集中的表,它將不受@Before
/ @After
方法的影響。)
要將數據庫初始化為初始數據集,只需在測試用例中實現這些方法:
@Override
protected DatabaseOperation getSetUpOperation() throws Exception
{
return DatabaseOperation.CLEAN_INSERT; // by default (will do DELETE_ALL + INSERT)
}
@Override
protected DatabaseOperation getTearDownOperation() throws Exception
{
return DatabaseOperation.NONE; // by default
}
如果某些測試在空表中插入行(例如,未在初始數據集中定義),則可能有外鍵約束。
只需在數據集中添加此空表而不添加任何行:
<mydb_mypopulatedtable id="1" name="toto" alias="funky"/>
<mydb_mypopulatedtable id="2" name="titi" alias="groovy"/>
<mydb_mypopulatedtable id="3" name="tutu" alias="creepy"/>
<mydb_myemptytable />
在這里,myemptytable有mypopulatedtable的外鍵。 如果未定義myemptytable,DBUnit將嘗試刪除mypopulatedtable但由於約束而失敗。 如果已定義,DBUnit將刪除myemptytable行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.