【问题标题】:C# - Moq - Object of mocked Interface is a proxy instead of the exposed classC# - Moq - 模拟接口的对象是代理而不是暴露的类
【发布时间】:2012-09-06 12:10:47
【问题描述】:

我试图模拟SqlConnection,本质上是IDbConnection

为此,我准备我的模拟测试:

var dbConnectionMock = new Mock<IDbConnection>();

dbConnectionMock.Setup(x => x.CreateCommand()).Returns(new SqlCommand());

var repository = new XxxRepository(dbConnectionMock.Object);


存储库的构造函数设置此属性:

private IDbConnection Connection { get; set; }

然后在调用数据库时使用Connection

var command = Connection.CreateCommand();

command.Connection = Connection; //这里失败了,因为Connection是IDbConnectionIDbConnectionProxy的代理类型。

如何避免使用代理?

我只想测试command.ExecuteNonQuery() 是否被调用。

【问题讨论】:

  • 在您自己的对象中抽象 ado.net,或使用实际连接。试图模拟 ado.net 比它的价值更麻烦。

标签: c# .net unit-testing mocking moq


【解决方案1】:

问题可能是SqlConnection 的使用,因为它的Connection 属性是SqlConnection 类型。尝试返回嘲笑的IDbCommand

var dbCommandMock = new Mock<IDbCommand>();
dbCommandMock.Setup(dbc => dbc.ExecuteNonQuery());
dbConnectionMock.Setup(dbc => dbc.CreateCommand()).Returns(dbCommandMock.Object);

// ...

dbCommandMock.VerifyAll();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2011-01-05
    • 2020-02-26
    • 2017-08-21
    相关资源
    最近更新 更多