我们有一个非常数据驱动的应用程序。我们希望对该应用程序进行单元测试,但开发人员不愿意构建完全假的存储库,因为数据量太大。我不怪他们。
请理解,我们正在对现有应用程序进行测试。如果我们从头开始,我们会进行大量架构更改,以便更好地使用虚拟存储库进行单元测试。
我们希望在测试中分发已知的 MDF 文件,将其复制并用于执行我们的测试。是否有这方面的批准技术?我熟悉将资源嵌入测试 DLL,但不熟悉将 MDF 嵌入其中,如果可能的话。
解决方法(有点):
最终我采用了 Andrew Tokeley 在模拟 Linq 数据上下文的文章中提到的 DataContextWrapper,并创建了一个名为 FakeDataContext.cs 的文件,它基本上是一堆列表。
我编写了一个真正野蛮的 T4 模板(类似于“从 <#=table.BaseClass.QualifiedName#> 中选择 *”),以从一个已知的良好数据库中复制数据,创建一个包含许多内容的巨大类。
请理解,我们正在对现有应用程序进行测试。如果我们从头开始,我们会进行大量架构更改,以便更好地使用虚拟存储库进行单元测试。
我们希望在测试中分发已知的 MDF 文件,将其复制并用于执行我们的测试。是否有这方面的批准技术?我熟悉将资源嵌入测试 DLL,但不熟悉将 MDF 嵌入其中,如果可能的话。
解决方法(有点):
最终我采用了 Andrew Tokeley 在模拟 Linq 数据上下文的文章中提到的 DataContextWrapper,并创建了一个名为 FakeDataContext.cs 的文件,它基本上是一堆列表。
我编写了一个真正野蛮的 T4 模板(类似于“从 <#=table.BaseClass.QualifiedName#> 中选择 *”),以从一个已知的良好数据库中复制数据,创建一个包含许多内容的巨大类。
List<Customer> _customers = new List<Customer>();
_customers.Add(new Customer(){CustomerId = 1, CustomerName = "ACME"});
这个类有25K行代码,但由于t4写了所有这些代码,谁在乎呢?它允许我们模拟数据上下文,因此我们可以对假上下文测试我们的linq查询,并且有一定的保证我们得到了正确的查询结果。原始开发人员在仓库中放置了大量业务逻辑,因此它允许我们针对已知的良好数据测试逻辑。