我正在尝试模拟 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
在调用 Db 时使用。
var command = Connection.CreateCommand();
command.Connection = Connection;
//这里失败了,因为 Connection 是 IDbConnection
的代理类型, IDbConnectionProxy
.
如何避免使用代理?
我只想测试 command.ExecuteNonQuery()
被调用了。
最佳答案
问题可能出在 SqlConnection
的使用上,因为它的 Connection
属性是 SqlConnection
类型。尝试返回 mocked IDbCommand
:
var dbCommandMock = new Mock<IDbCommand>();
dbCommandMock.Setup(dbc => dbc.ExecuteNonQuery());
dbConnectionMock.Setup(dbc => dbc.CreateCommand()).Returns(dbCommandMock.Object);
// ...
dbCommandMock.VerifyAll();
关于C# - Moq - 模拟接口(interface)的对象是代理而不是公开的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299827/