我有一个使用Entity Framework调用存储过程并返回查询结果的方法。
如何为此方法编写单元测试?我不确定如何模拟调用和返回值。
存储过程返回3列。
public VerifyUser VerifyUser(string accountKey)
{
try
{
LoansContext loansContext = new LoansContext();
VerifyUser queryResult = null;
using (loansContext)
{
using (loansContext.Database.Connection)
{
loansContext.Database.Connection.Open();
string sqlStatment = string.Format("{0} @AccountKey = '{1}'", "execute [Loan].[Proc_VerifyUser]", accountKey);
queryResult = loansContext.Database
.SqlQuery<VerifyUser>(sqlStatment)
.Single();
}
}
}
catch (Exception exception)
{
LoansDomainTrace.Trace.Error(EventId.Retrieve,
() => string.Format("VerifyUser exception: {0}", exception.Message), exception);
throw;
}
}
答案 0 :(得分:1)
在这种情况下,我喜欢对我的方法逻辑进行单元测试,然后从外部资源(例如DB)中隔离我想要测试的代码(在你的情况下是VerifyUser)。我很好的选择是某种in-memory EF provider,但更常见的方法是抽象出你的EF实现,例如有某种存储库模式。没有这种隔离,你编写的任何测试都是集成,而不是单元测试。