如何創建一個單元測試,在asp.net如何創建一個單元測試,更新記錄到數據庫在asp.net
回答
雖然在技術上我們不叫這個更新記錄到數據庫'單元測試',但是'集成測試'(如Oded解釋),你可以通過使用單元測試框架(如MSTest(Visual Studio 2008/2010 professional的一部分)或免費的單元測試框架之一)如NUnit。
但是,測試ASP.NET Web項目通常很困難,尤其是當您將所有邏輯放入網頁時。最好的辦法是將所有業務邏輯提取到單獨的層(通常是解決方案中的單獨項目),並從網頁中調用該邏輯。但是也許你已經有了這種分離,這將會很棒。
這樣你也可以在你的測試中調用這個邏輯。對於集成測試,最好有一個單獨的測試數據庫。測試數據庫必須包含已知(和穩定的)數據集(或者完全爲空)。不要使用生產數據庫的副本,因爲數據更改時,測試可能突然失敗。你也應該確保數據庫中由集成測試所做的所有更改都應該回滾。否則,測試數據庫中的數據會不斷變化,這可能會導致您的測試突然失敗。
我在集成測試中始終使用TransactionScope
(並且從未在我的生產代碼中)。這確保所有數據都會回滾。以下是對這樣的集成測試可能看起來像一個例子,在使用的MSTest:
[TestClass]
public class CustomerMovedCommandTests
{
// This test test whether the Execute method of the
// CustomerMovedCommand class in the business layer
// does the expected changes in the database.
[TestMethod]
public void Execute_WithValidAddress_Succeeds()
{
using (new TransactionScope())
{
// Arrange
int custId = 100;
using (var db = new ContextFactory.CreateContext())
{
// Insert customer 100 into test database.
db.Customers.InsertOnSubmit(new Customer()
{
Id = custId, City = "London", Country = "UK"
});
db.SubmitChanges();
}
string expectedCity = "New York";
string expectedCountry = "USA";
var command = new CustomerMovedCommand();
command.CustomerId = custId;
command.NewAddress = new Address()
{
City = expectedCity, Country = expectedCountry
};
// Act
command.Execute();
// Assert
using (var db = new ContextFactory.CreateContext())
{
var c = db.Customers.Single(c => c.Id == custId);
Assert.AreEqual(expectedCity, c.City);
Assert.AreEqual(expectedCountry, c.Country);
}
} // Dispose rolls back everything.
}
}
我希望這可以幫助,但下一次,請更具體一點在你的問題。
很好的解釋。關於'單元測試'我會補充你可以'模擬'你的圖層。原則是儘可能地模擬真實情況下會發生什麼情況,以驗證您的代碼而不做實際的事情:影響您的數據,文件或進程......數據模擬將模擬您的數據庫中將執行的操作但不會連接或訪問數據庫。我想這不是你想要檢查的內容,而是一種從數據庫映射測試(集成測試)中隔離數據訪問測試(單元測試)的方式。模擬通常是'單元測試',因爲環境並不重要。 – JoeBilly 2010-05-13 10:21:29
@JoeBilly:我同意。集成測試應該是最後的手段,您應該嘗試使架構單元測試更友好。但是,這需要付出很多努力(和經驗)。作爲一名顧問,我經常建議經驗較少的團隊開始進行集成測試,因爲我不需要對其架構進行任何更改。 LINQ確實讓事情變得更糟:您永遠不會知道您的O/RM是否支持您編寫的LINQ查詢。正因爲如此,我喜歡看到內存提供者被添加到實體框架中,其行爲與真正的EF數據庫提供者完全一樣。 – Steven 2010-05-13 19:16:56
- 1. 如何測試是否創建數據庫記錄
- 2. 如何創建一個函數添加記錄到數據庫
- 3. 創建測試數據庫Django的單元測試
- 4. asp.net mvc創建數據庫記錄
- 5. 在ASP.NET核心創建單元測試
- 6. 在datagridview單元格值更改後更新數據庫記錄?
- 7. 在數據庫中添加記錄的單元測試
- 8. 在asp.net中創建新的數據庫記錄時出錯mvc
- 9. 單元測試運行.sql腳本到SQL創建數據庫
- 10. 如何單元測試數據庫類
- 11. 單元測試:向數據庫添加記錄
- 12. 如何記錄單元測試?
- 13. 關於爲數據庫層創建單元測試的建議
- 14. 單元測試數據庫
- 15. 「單元」測試數據庫
- 16. 單元測試數據庫
- 17. 測試模型 - 如何創建記錄
- 18. 更新數據庫記錄
- 19. 更新數據庫記錄
- 20. 如何測量在數據庫中創建新記錄所用的時間
- 21. CakePHP在單元測試期間登錄到實時數據庫
- 22. 如何在x ++的表單數據源中創建新記錄
- 23. Android:單元測試:如何使用SensorManager創建單元測試?
- 24. 如何爲每個測試運行重新創建一個數據庫?
- 25. 單元測試和記錄
- 26. 如何通過asp.net更新SQL Server數據庫中的記錄?
- 27. React/Redux:在數據庫中創建記錄並訪問新創建的記錄
- 28. Asp.net mvc創建新記錄
- 29. django單元測試多個數據庫
- 30. DataGridView:如何在編輯後更新記錄到數據庫
如果您正在更新數據庫中的記錄,它是一個集成測試,而不是單元測試。 – Oded 2010-05-13 09:02:02
「的測試是不是一個單元測試,如果: 它談論到數據庫 它通過網絡進行通信 倒是文件系統 [...]。」 - 邁克爾「修改代碼的工作」 Feathers,2005 [http://www.artima.com/weblogs/viewpost.jsp?thread=126923] – Johnsyweb 2010-05-13 13:22:48