我在我的项目中使用LinqToSQL。作为我的单元测试的一部分,我正在尝试模拟datacontext,它是ASP.NET WEB API项目中引用的另一个程序集的一部分。
基于以下网址: http://weblogs.asp.net/rashid/100-unit-testable-linq-to-sql-repository
我尝试为datacontext创建一个部分类,但不知何故它不起作用。
任何人都可以帮助我知道如何模拟datacontext类,它是另一个引用程序集的一部分。
答案 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的情况下进行圆形测试,这实际上是相同的。你只是创建一些可以模拟的东西,作为非事物的包装器。