c# - 如何使用 Entity Framework 测试 View ?

标签 c# sql-server entity-framework unit-testing view

我们使用不属于我们管理的数据库。我们在其上定义了一些 View ,以便我们的代码(带有 Entity Framework 的 C#)可以简单地映射到这些 View 。这些 View 稍后将提供给数据库所有者。他们将实现它们,以便我们可以使用它们。

在测试期间,我们模拟该数据库。我们在数据库备份上使用 Entity Framework Tools 来生成它的 DbContext。我们每次运行测试时都会创建它。这是要走的路吗?

在测试过程中,我们希望在一些表中插入数据,并从相关 View 中读取结果。我们这样做是为了测试 View 以及将作用于它的 C# 代码(这些 View 中有重要的逻辑)。

您对此有何看法?难道我们不应该每次都重新创建模拟数据库,而是使用一个已经定义了 View 的静态数据库吗?我们是否应该在 C# 中定义 View 以便在数据库中创建它们?我们的做法是完全错误的吗?其他人如何解决类似问题?

最佳答案

“在测试期间,我们模拟该数据库......”

在 EF 版本 6 或更高版本中,您还可以模拟 DBContext。

“在测试期间我们想插入...”

有继承DBContext的源码吗?我的建议是像处理表格一样处理 View 。为它创建一个类(实体)并在您的 applicationDBContext 中像普通表一样映射 View 。

 public DbSet<ImAView> ImAViews { get; set; }

通过数据库迁移,您可以使用普通的 T-SQL 脚本修改您的 View 。

“你对此有何看法?不应该”

如果您正在测试应用程序(也是版本 6 中的数据访问层),您可以模拟所有内容。不要使用数据库创建,这会使您的测试非常慢,并且在某些情况下,测试将取决于其他测试。

如果你想测试数据库本身或迁移或一些批量操作,那么你必须创建一个数据库(你可以在没有 C# 的 SQL Server 中做任何事情)并向它提供数据。

关于c# - 如何使用 Entity Framework 测试 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28495482/

相关文章:

c# - 如何使用多个子句对 Entity Framework 的异步方法进行单元测试

c# - 如何获取 GridView 中特定列的总和?

C#将字符串转换为if条件

sql - 如何取消透视同一个表中的多列

asp.net-mvc - 继承自实体类,因此可以在 Entity Framework 中使用

linq - 使用 LINQ SUM 时的异常

c# - 如何缓存 .NET Web API 请求(并使用 w/AngularJS $http)

c# - 在 ultragrid 中获取特定单元格值的条件

sql - Microsoft SQL Server - 零毫秒的 XML 日期时间格式

sql - 如何在 T-SQL 中对多个条件求和?