【问题标题】:How do I setup a method to return a DbParameter?如何设置返回 DbParameter 的方法?
【发布时间】:2017-02-21 20:38:39
【问题描述】:

我有一个界面,我正在尝试模拟单元测试。它有一个方法,接受两个参数,名称和值,并返回一个 DbParameter 以从这些参数构建

public interface IDbUnitOfWork {
   DbParameter BuildParameter(string name, object value);
}

我正在尝试设置一个可以模拟返回的 DbParameter 的测试用例,但我遇到了麻烦。

   unitOfWorkMock = new Mock<IDbUnitOfWork>();
   unitOfWorkFactoryMock = new Mock<IUnitOfWorkFactory>();
   unitOfWorkFactoryMock.Setup(u => u.LoadUnitOfWork()).Returns(new Mock<IDbUnitOfWork>().Object);
   unitOfWorkMock
            .Setup(u => u.BuildParameter(It.IsAny<string>(), It.IsAny<object>()))
            .Returns((name, value) => ASDASDASDASD);

如何返回填充了传入参数的 DbParameter 或 Mocked DbParameter?


解决方案(感谢 Patrick)

 unitOfWorkMock
    .Setup(u => u.BuildParameter(It.IsAny<string>(), It.IsAny<object>()))
    .Returns((string name, object value) => Mock.Of<DbParameter>(p=> p.ParameterName == name && p.Value == value));

【问题讨论】:

    标签: c# unit-testing moq


    【解决方案1】:

    由于DbParameter is abstract 等可以被嘲笑,我相信这应该可以解决问题:

    unitOfWorkMock
        .Setup(u => u.BuildParameter(It.IsAny<string>(), It.IsAny<object>()))
        .Returns((name, value) => 
            Mock.Of<DbParameter>(x => x.ParameterName == name && x.Value == value)
        );
    

    【讨论】:

    • 谢谢帕蒂克!你让我走上了一条新的道路,我发现了我的根本问题。结果是我需要指定名称和值的数据类型。我将更新问题并将答案归功于您。
    • 啊,是的,这是有道理的。随意添加您的解决方案作为答案并接受它!
    • 不,你回答了。
    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 2015-12-14
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多