如何设置返回DbParameter的方法?

时间:2017-02-21 20:38:40

标签: c# unit-testing moq

我有一个界面,我试图模拟单元测试。它有一个方法接受两个参数,名称和值,并返回一个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 up 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));

1 个答案:

答案 0 :(得分: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)
    );