我使用NUnit集成測試。 我正在測試以確保用戶無法使用現有電子郵件創建帳戶。 ([email protected])在TDD中創建測試數據的最佳位置在哪裏?
我需要在數據庫中擁有測試數據(使用[email protected]電子郵件帳戶)。
我可以在測試函數或sql腳本中創建此帳戶(並在集成測試之前運行它)。
哪裏可以創建這個測試數據?
我使用NUnit集成測試。 我正在測試以確保用戶無法使用現有電子郵件創建帳戶。 ([email protected])在TDD中創建測試數據的最佳位置在哪裏?
我需要在數據庫中擁有測試數據(使用[email protected]電子郵件帳戶)。
我可以在測試函數或sql腳本中創建此帳戶(並在集成測試之前運行它)。
哪裏可以創建這個測試數據?
而且沒有哪個選項是錯誤的,但也有許多方法來擴展和鞏固自己的戰略:用工具,如RedGate's Sql Data Gen
這些解決方案都是MUT ually獨家。我會特別推薦最後一項(可插拔提供程序),然後在對象模擬或人爲但質量db測試數據之間進行選擇。
最好的辦法是研究依賴注入和Mocking框架。通過這種方式,您可以將數據提供者換成模擬數據提供者,並使用適合您特定測試需求的數據。
如果你使用的是NHibernate或類似的,你可以在每次測試(fixture)之前重新創建你的數據庫模式。
在你描述的情況下,我寧願在測試函數中創建帳戶。
單元測試應儘可能自包含。此外,如果您可以在一個地方看到測試所需的所有數據,它有助於理解您正在測試的內容。
這裏是一個完全由例子應該說明:
[Test]
public void Test_CannotCreateDuplicateEmail()
{
// Arrange
CreateAccount("[email protected]"); // OK
// Act
try
{
CreateAccount("[email protected]");
// If control arrives here, then the test has failed.
Assert.Fail();
}
// Assert
catch(AccountException ex)
{
// Assert that the correct exception has been thrown.
Assert.AreEqual("Failed", ex.Message);
}
}
+1展鵬的SQL數據根;我以前不知道這一點。謝謝! – pencilCake 2010-11-16 17:02:00