gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:15:36 24 4
gpt4 key购买 nike

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

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

我们想分发一个已知的带有测试的 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 <#=table.BaseClass.QualifiedName#>”)来从一个已知的好数据库复制数据来创建一个巨大的类,里面有这样的东西:

List<Customer> _customers = new List<Customer>();
_customers.Add(new Customer(){CustomerId = 1, CustomerName = "ACME"});

等等。

这个类是 25K 行,但既然 t4 写了所有这些行,谁在乎呢?它允许我们仅模拟数据上下文,因此我们可以在合理保证查询正确的情况下针对假上下文测试我们的 linq。最初的开发人员在 repo 中放置了大量业务逻辑,因此它允许我们根据已知的良好数据测试逻辑。

最佳答案

能否在共享服务器上设置测试数据库,这样就不必部署 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();
}
}

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

关于asp.net-mvc - 使用数据对 ASP.NET MVC 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4451580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com