我在嘗試使用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不會被回滾的情況下,在我的例子顯示?
我很樂意提供有關情況和設置的更多信息!
謝謝!這解釋了它。很明顯,當你考慮它時:-) 我試圖創建的測試不能依賴於模擬對象,因爲我想在用戶交互後斷言數據庫的狀態。我會寫一個關於這個新的和更一般的問題... – juarola 2009-09-24 04:02:29