我正在尝试模拟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; }

然后在呼叫Db时使用Connection

var command = Connection.CreateCommand();

command.Connection = Connection; //此处失败,因为Connection是IDbConnectionIDbConnectionProxy的代理类型。

如何避免使用代理?

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

最佳答案

问题可能是使用SqlConnection,因为其Connection属性是SqlConnection类型。尝试返回模拟的IDbCommand代替:

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

// ...

dbCommandMock.VerifyAll();

10-06 12:07