持續集成之路——使用SpringTestDbunit管理數據集的一個問題

在進行數據訪問的單元測試,一般都會新增數據記錄的情況,那麼在設置數據集一般會是:

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
</dataset>

然後在測試方法中,通過驗證新增的記錄數或者新增記錄的內容,確保被測試方法正確執行:

    @Test
    @DatabaseSetup("user/UserService-addUser-dataset.xml")
    public void testAddUser(){
        User user = new User();
        userService.addUser(user);
        List<User> userList = (List<User>)userDao.findAll();
        assertEquals(1, userList.size());
    }

上面的測試方法,在多數情況會正常運行,不會出現問題,但是卻留下一個隱患:如果同時存在包含了user的數據集,驗證記錄數的斷言很可能會失敗。比如,存在一個測試中使用的數據集:

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <user id="1" name="Test One"/>
    <user id="2" name="Test Two"/>
</dataset>
這是testAddUser方法很可能出現"Expect: 1,Actual: 3"的失敗信息。

要徹底解決這個問題也很簡單,只需要將會新增數據的表設置爲空就行了:

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <user/>
</dataset>

問題的原因:SpringTestDbunit在執行測試之前會檢查DatabaseSetup註解,對數據集中指定的表進行CLEAN_INSERT操作,而數據集中沒有提到的表則會保持不變。所以要想徹底清空一個表,必須要指定一個空記錄。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章