我正在尝试模拟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是IDbConnection
,IDbConnectionProxy
的代理类型。
如何避免使用代理?
我只想测试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();