[英]Unit testing Entity Framework Core 2.0 if using a stored procedure
我有单元测试数据访问层的问题。 我通过存储过程查询数据库,所以现在我不能使用Entity Framework内存数据库,因为内存数据库不是关系数据库。 另外,我读到我必须使用集成测试,但我找不到任何使用存储过程进行测试的示例。
所以我的问题是如何测试数据访问层,我是否需要创建一个与我的真实数据库相同的测试数据库?
这是我的数据访问层代码:
public class Repository<TEntity> : IRepository<TEntity> where TEntity : Domains.Users
{
private DbSet<TEntity> dbSet;
private readonly DbContext context;
public Repository(DbContext context)
{
this.context = context;
dbSet = context.Set<TEntity>();
}
public void Add(TEntity entity)
{
if (entity is Domains.Users)
{
SqlParameter param1 = new SqlParameter();
param1.ParameterName = "@Adress";
param1.DbType = System.Data.DbType.String;
param1.Value = (entity as Domains.Users).Adress;
SqlParameter param2 = new SqlParameter();
param2.ParameterName = "@Email";
param2.DbType = System.Data.DbType.String;
param2.Value = (entity as Domains.Users).Email;
SqlParameter param3 = new SqlParameter();
param3.ParameterName = "@Name";
param3.DbType = System.Data.DbType.String;
param3.Value = (entity as Domains.Users).Name;
SqlParameter param4 = new SqlParameter();
param4.ParameterName = "@Lastname";
param4.DbType = System.Data.DbType.String;
param4.Value = (entity as Domains.Users).Lastname;
context.Database.ExecuteSqlCommand("sp_AddUser @Adress, @Email, @Name, @Surname", param1, param2, param3, param4);
}
}
}
我的建议是使用测试( 真实 )数据库(根据您公司的策略,它可以是测试服务器上的数据库,或者您可以在您的开发机器上使用数据库提供程序的本地实例等)。
集成测试的要点是验证您的应用程序是否作为单个单元稳定运行。 测试环境 必须尽可能接近生产evn。 这意味着一个真正的数据库 内存数据库表示中的EF对此没有好处。
您还可以检查组件测试 。 它们就像集成测试一样,但是使用它们你不会将应用程序作为一个单元进行测试,而是应用程序的主要组件,如存储库,服务......等,另一方面进行集成测试,你最喜欢测试REST api端点(在REST应用程序的上下文中)。
关于集成/组件测试的一些注意事项
集成测试的示例
如果您正在开发REST api(仅举例)。 这是非常基本的测试用例,不能作为100%最佳实践。 只是想看看它们可能是什么。
注意 :在某些情况下,在开始开发实际数据库之前,我们仅在应用程序的请求中使用内存表示形式进行某些原型设计。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.