需要測試數據庫的一個選項是使用dbsafe。 它也有一個NuGet包。
「如果DAL使用的實現或技術發生更改,則可以重新使用測試。」
dbsafe提供了填充數據庫,執行SQL命令以及將預期數據與實際數據進行比較的方法。
它使用一個或多個帶有SQL腳本和數據集的xml輸入文件。
<?xml version="1.0" encoding="utf-8" ?>
<dbTest>
<scripts>
<script name="delete-products">
DELETE [dbo].[Product];
</script>
<script name="delete-categories">
DELETE [dbo].[Category];
</script>
</scripts>
<datasets>
<dataset name="categories" setIdentityInsert="true" table="Category">
<data>
<row Id="1" Name="category-1" />
<row Id="2" Name="category-2" />
<row Id="3" Name="category-3" />
</data>
</dataset>
<dataset name="suppliers" setIdentityInsert="true" table="Supplier">
<data>
<row Id="1" Name="supplier-1" ContactName="contact-name-1" ContactPhone="100-200-0001" ContactEmail="[email protected]" />
<row Id="2" Name="supplier-2" ContactName="contact-name-2" ContactPhone="100-200-0002" ContactEmail="[email protected]" />
<row Id="3" Name="supplier-3" ContactName="contact-name-3" ContactPhone="100-200-0003" ContactEmail="[email protected]" />
</data>
</dataset>
</datasets>
</dbTest>
這些元素是可以在測試過程中隨時執行的SQL命令。例如。清潔表格,選擇實際數據。
元素包含可用於填充表或作爲預期數據的數據。
dbsafe支持使用AAA(Arrange,Act,Assert)模式編寫單元測試。
排列初始化對象並設置傳遞給被測試方法的數據的值。
方法ExecuteScripts可用於執行腳本來刪除舊記錄。方法LoadTables可以用來填充表格。
Act使用排列的參數調用待測試的方法。
斷言驗證被測試方法的行爲是否按預期行爲。
方法AssertDatasetVsScript可用於比較數據庫中的預期數據與實際數據。
這很簡單......除非您希望通過一個測試雙推入的數據可以通過另一個(即,如果您通過EF存儲並希望通過Dapper進行檢索)獲得。你需要簡單版本還是硬版本(兩者都有狀態)? – Fenton
是的,我希望通過一個測試雙推入的數據可以通過另一個。在一些測試中,我會通過Dapper獲取數據,並在同一測試中使用它來獲取EF中的另一個數據。 –
你需要什麼(IMO)是集成測試來測試數據訪問本身。不要試圖嘲笑所有的東西。遲早你會碰到嘲笑和真正的東西之間不可逾越的執行差異。 –