如何模拟datacontext(LINQToSQL),它是另一个程序集的一部分?

时间:2016-02-04 12:37:50

标签: unit-testing linq-to-sql asp.net-web-api2 mstest datacontext

我在我的项目中使用LinqToSQL。作为我的单元测试的一部分,我正在尝试模拟datacontext,它是ASP.NET WEB API项目中引用的另一个程序集的一部分。

基于以下网址: http://weblogs.asp.net/rashid/100-unit-testable-linq-to-sql-repository

我尝试为datacontext创建一个部分类,但不知何故它不起作用。

任何人都可以帮助我知道如何模拟datacontext类,它是另一个引用程序集的一部分。

1 个答案:

答案 0 :(得分:0)

从我可以通过skim阅读那篇文章收集到的内容是,它主要是调用断言,并且没有可查询结果的测试。 IMO这些测试是非常无意义的,当你开始进行有意义的测试时,它不会工作,因为Linq-to-sql不可模拟,DbContext不可模仿,不能使用pocos等。本文写于2009年和Linq -to-sql不是当前的产品。

该项目有多大?如果可能的话,移动到EF6并使用package com.readcsvfile.test; import java.io.IOException; import com.readcsvfile.ReadCsvFile; public class ReadCsvFileTest { public static void main(String[] args) { ReadCsvFile r1 = new ReadCsvFile(); String fileName = "D://sample2.csv"; try { r1.readFile(fileName); } catch (IOException e) { System.out.println("file not found"); } } } ## 创建IDbSet或模拟FakeDbSet自己,现在很多方法都是虚拟的。看看这个Q& A:

How are people unit testing with Entity Framework 6, should you bother?

如果你搜索单元测试EF6,你会发现你想要实现的更容易。

如果你真的无法改变Ling2Sql那么使用façade模式并在其中组成你的DbContext。 façade将公开DbSets是IQueryable并包装任何方法调用。这意味着您必须创建DbSet的方法和属性,然后您可以模拟外观。或者,您也可以为外观创建一个界面,您也可以使用该界面进行模拟。这将使您编写的任何复杂查询完全可测试,但您正在创建调用其他代码的代码。您还需要观看外观的生活方式,因为这是DbContext的新功能。这种模式用于在涉及AppSettings的情况下进行圆形测试,这实际上是相同的。你只是创建一些可以模拟的东西,作为非事物的包装器。