Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用数据对ASP.NET MVC进行单元测试_Asp.net Mvc_Unit Testing_Integration Testing_Mdf - Fatal编程技术网

Asp.net mvc 使用数据对ASP.NET MVC进行单元测试

Asp.net mvc 使用数据对ASP.NET MVC进行单元测试,asp.net-mvc,unit-testing,integration-testing,mdf,Asp.net Mvc,Unit Testing,Integration Testing,Mdf,我们有一个疯狂的数据驱动应用程序。我们希望对应用程序进行单元测试,但由于数据量大,开发人员不愿意构建完全虚假的存储库。我真的不怪他们 了解我们正在将测试改装到现有应用程序中。如果我们重新开始,我们将进行大量的体系结构更改,以便更好地使用假存储库进行单元测试 我们希望分发一个已知的mdf文件和测试,复制它,并使用它来执行我们的测试。有没有认可的技术?我熟悉将资源嵌入测试dll,但不熟悉嵌入mdf——如果可以的话 解决方案(某种程度上): 最后,我从Andrew Tokeley关于模拟Linq数据

我们有一个疯狂的数据驱动应用程序。我们希望对应用程序进行单元测试,但由于数据量大,开发人员不愿意构建完全虚假的存储库。我真的不怪他们

了解我们正在将测试改装到现有应用程序中。如果我们重新开始,我们将进行大量的体系结构更改,以便更好地使用假存储库进行单元测试

我们希望分发一个已知的mdf文件和测试,复制它,并使用它来执行我们的测试。有没有认可的技术?我熟悉将资源嵌入测试dll,但不熟悉嵌入mdf——如果可以的话


解决方案(某种程度上):

最后,我从Andrew Tokeley关于模拟Linq数据上下文的文章中获取了DataContextWrapper(http://andrewtokeley.net/archive/2008/07/06/mocking-linq-to-sql-datacontext.aspx) 创建了一个FakeDataContext.cs,它基本上是一堆列表

我编写了一个真正野蛮的T4模板(想想“select*FROM”),从一个已知良好的数据库中复制数据,创建了一个包含以下内容的大型类:

List<Customer> _customers = new List<Customer>();
_customers.Add(new Customer(){CustomerId = 1, CustomerName = "ACME"});
List_customers=newlist();
_添加(新客户(){CustomerId=1,CustomerName=“ACME”});
等等


这个类有25K行,但既然t4写了所有这些行,谁在乎呢?它允许我们只模拟数据上下文,这样我们就可以根据伪上下文测试linq,并合理地保证查询是正确的。最初的开发人员在回购协议中加入了大量的业务逻辑,因此它允许我们根据已知的良好数据测试逻辑

能否在共享服务器上设置测试数据库,这样就不必部署mdf文件

另外,您能用TransactionScope包装所有单元测试吗

我在公司使用了一个测试数据库,其中包含所有测试的已知参考数据,并为集成测试创建了一个基类,如下所示:

[TestClass]
public class ServiceTest
{
    private TransactionScope Transaction { get; set; }

    [TestInitialize]
    public virtual void TestInitialize()
    {
        Transaction = new TransactionScope();
    }

    [TestCleanup]
    public virtual void TestCleanup()
    {
        Transaction.Dispose();
    }
}

每个测试都将回滚所有更改,因此测试数据不会污染数据库。

您看过模拟框架吗?如果您的代码是以这样一种方式编写的,即可以将数据依赖项注入到正在进行单元测试的对象中,那么您应该能够模拟这些数据依赖项


我在Moq方面取得了巨大的成功,但从一开始我就用依赖注入编写了代码。

从技术上讲,这些被称为“集成测试”。这是我在项目中使用的方法,非常有效!还应该注意的是,xUnit提供了一种内置的方法:我们这样做。我建议使用这种方法,而不要使用伪造的存储库。是否要伪造10000行存储过程?:)您正在寻找的是一种进行集成测试的方法,@Jakub为您提供了一个很好的答案。您使用什么测试框架?Vanilla VS 2010来驱动我们的单元(小型集成?)测试。比如:会员层在5个错误密码后是否正确锁定了一个帐户?。Brian提到这个应用程序是高度数据驱动的——我想模仿(一个伟大的实践)可能不太可行。我曾经在一个应用程序上工作,它使用了来自数据库的大量数据,并且逻辑分布在许多类/服务中,如果不先重写它,就不可能模拟它;-)是的,一团糟。我们确实尽可能使用最小起订量,但虚假数据的数量简直是疯狂。我们正在注入数据依赖性,但伪造的存储库正在变得越来越庞大。