1

我在嘗試使用Selenium和NUnit創建集成測試時遇到了一些問題。使用Selenium和NUnit進行集成測試 - 從UI到DB

我想在NUnit測試中使用Selenium RC來驅動我的ASP.NET Web應用程序,並且希望測試能夠真正執行數據庫中所有真實用戶都會執行的操作。當然,如果數據庫可以在Selenium完成之後回滾,並且我聲稱db包含了來自ui的數據的新行(等),那將會很好。

所以,這裏的設置,我有(在某種僞代碼):

TestMethod() 
{ 
    Using(new TransActionScope) 
    { 
     Selenium.StartSelenium() 
     Selenium.SelectAndClickAndDoStuffInUI() 
     AssertSomething() 
    } 
} 

現在,SelectAndClickAndDoStuffInUI法點擊周圍的UI,從而觸發了我們的專有DA-框架。我們的框架將所有東西寫入數據庫,而AssertSomething方法斷言db中的一切都很好。框架在其內部工作中使用交易(「必需」)。

所以一切都很好,對不對?不,可悲的不是。上面例子中的TransActionScope不應該被提交(沒有txScope.Complete() - 在那裏調用),因此所有內部事務也應該回滾,對吧?那麼他們不會,而且Selenium通過用戶界面所做的每件事都會致力於數據庫。

我真的很想知道這個地方出錯了,但到目前爲止還沒有找到答案。

感謝您的閱讀,和(最後)這裏的實際問題:

爲什麼的TransactionScope不會被回滾的情況下,在我的例子顯示?

我很樂意提供有關情況和設置的更多信息!

回答

3

您正在使用一個用戶界面的ASP應用程序。這意味着您的測試無法回滾您所做的更改。

事務範圍只能在您自己的過程中工作。事務管理器如何能夠撤消web界面中的點擊?它可能在任何地方。 Selenium只是遠程控制瀏覽器。

您應該使用模擬對象創建您的「真正的」單元測試,而不是根本訪問數據庫。它與一個正常的asp頁面有點困難,但你不能看看asp.MVC來找到一個可能的解決方案來解決這個問題。

+0

謝謝!這解釋了它。很明顯,當你考慮它時:-) 我試圖創建的測試不能依賴於模擬對象,因爲我想在用戶交互後斷言數據庫的狀態。我會寫一個關於這個新的和更一般的問題... – juarola 2009-09-24 04:02:29

相關問題