需要测试数据库的一个选项是使用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)是集成测试来测试数据访问本身。不要试图嘲笑所有的东西。迟早你会碰到嘲笑和真正的东西之间不可逾越的执行差异。 –