【发布时间】:2020-04-01 07:59:57
【问题描述】:
我正在 ASP.NET Core 3.1 中编写 API,使用 EF Core 访问 SQL Server 数据库。我在 API 中有一个函数,它需要调用一个带有多个输入参数和一个输出参数的存储过程。该函数的简化版本如下。
我正在使用DbContext 和.UseInMemoryDatabase() 进行其他测试,但内存数据库不能与存储过程一起使用。
(此解决方案是数据库优先,而不是代码优先。如果需要,可以更改存储过程,但如果我不必这样做会更好。我可以更改我的 C# 函数来调用存储过程如果有帮助的话,另一种方式。)
如何对这个函数进行单元测试?
public class MyFoo : IFoo
{
public ApplicationDbContext DbContext { get; }
public MyFoo(ApplicationDbContext dbContext)
{
DbContext = dbContext;
}
public async Task<bool> GetMyStoredProcResult(string val1, string val2, string val3, string val4, string val5)
{
// input validation removed for brevity
var p1 = new SqlParameter
{
ParameterName = "p1",
DbType = System.Data.DbType.String,
Direction = System.Data.ParameterDirection.Input,
Value = val1
};
// p2 - p5 removed for brevity
var resultParam = new SqlParameter
{
ParameterName = "Result",
DbType = System.Data.DbType.Boolean,
Direction = System.Data.ParameterDirection.Output
};
var sql = "EXEC sp_MyProcedure @p1, @p2, @p3, @p4, @p5, @Result OUTPUT";
_ = await DbContext.Database.ExecuteSqlRawAsync(sql, p1, p2, p3, p4, p5, resultParam);
return (bool)resultParam.Value;
}
}
【问题讨论】:
标签: asp.net-core stored-procedures entity-framework-core xunit.net asp.net-core-3.1