【问题标题】:How to mock a return value statement in dapper store procedure如何在 Dapper 存储过程中模拟返回值语句
【发布时间】:2021-03-01 22:02:15
【问题描述】:
    string procedure ="updateRecords.sql"
    DynamicParameters parameters = new DynamicParameters();

    parameters.Add("@name", "rohan");
    parameters.Add("@age", 23);
    parameters.Add("@returnValue", DbType.Int32, direction: ParameterDirection.ReturnValue);

    repository.Update(procedure, parameters);
    var result = parameters.Get<int>("@returnValue"); 

当我尝试模拟时

   var GetReturn = "3";
   var mockGet = new Mock<DynamicParameters>();

   mockGet.Setup(x=> x.Get<string>(GetReturn)).Returns(GetReturn); 

我遇到了这个异常,

System.NotSupportedException: '不支持的表达式:x => x.Get("@returnValue") 不可覆盖的成员(此处:DynamicParameters.Get)不得用于设置/验证表达式。'

请提出解决此异常的方法

【问题讨论】:

标签: c# asp.net stored-procedures dapper


【解决方案1】:

Mock 只能模拟Interface 方法、abstract 方法或virtual 方法。

Get 函数不属于这些类别。

因此,如果您无法更改 DynamicParameters 类,那么您必须围绕它创建一个包装器来模拟该包装器。

一般来说,我们不对数据库访问进行单元测试。我们模拟实现数据库访问的类,以便我们可以测试业务功能。

为 Dapper 类创建包装器并替换所有代码只是为了单元测试几乎没有行为是不值得的。

【讨论】:

    猜你喜欢
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多