用于调用存储过程的单元测试

时间:2016-05-09 16:53:27

标签: c# unit-testing

我有一个使用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;
    }
}

1 个答案:

答案 0 :(得分:1)

在这种情况下,我喜欢对我的方法逻辑进行单元测试,然后从外部资源(例如DB)中隔离我想要测试的代码(在你的情况下是VerifyUser)。我很好的选择是某种in-memory EF provider,但更常见的方法是抽象出你的EF实现,例如有某种存储库模式。没有这种隔离,你编写的任何测试都是集成,而不是单元测试。