2012-01-15 44 views
0

我的集成測試是使用目前正使用的EF initalizers產生的實況DB。當我單獨運行測試時,它們按預期運行。但是,當我一次全部運行它們時,我會遇到很多失敗的測試。實體框架代碼優先 - 測試互相重疊

我似乎有一些重疊的事情。例如,我有兩個使用相同設置方法的測試。此設置方法構建&填充數據庫。兩個測試都執行相同的測試ACT,它爲數據庫添加了一些項目(相同的項目),但是獨特的是每個測試都在尋找不同的計算(而不是一個大的測試)。我可以解決這個

一種方式是做一些掛羊頭賣狗肉的,致力於爲所運行的每個測試的唯一DB的設置,這樣,一切都保持隔離。然而,當我這樣做時,EF啓動的東西不起作用,因爲它正在創建一個新的數據庫,而不是放棄新的數據庫(後者觸發播種)。

想法如何解決這個問題?看起來像我的測試組織......只是沒有展示如何最好地去做,並且正在尋找輸入。真的不希望手動運行每個測試。

回答

2

使用測試設置和拆除通過測試框架提供的方法和測試設置啓動事務和回退測試交易推倒(example for NUnit)。您甚至可以將設置和拆卸方法放到基類中進行所有測試,並且每個測試都將在它自己的事務中運行,並在測試結束時回滾並將數據庫置於初始狀態。

0

下一頁什麼拉吉斯拉夫提到你也可以使用什麼叫做Delta Assertion

例如,假設您測試添加新Order到SUT。

您可以創建一個測試,在測試結束時聲明數據庫中只有1 Order

但您還可以通過首先檢查測試方法開始時數據庫中有多少Orders來創建Delta斷言。然後,在向SUT添加Order之後,您會測試數據庫中是否存在NumberOfOrdersAtStart + 1