C# - Moq - 模拟接口的对象是代理而不是公开的类

Kri*_*anB 3 .net c# unit-testing moq mocking

我正在尝试模拟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()所谓的.

k.m*_*k.m 5

问题可能是使用SqlConnection,因为它的Connection属性是SqlConnection类型.尝试返回模拟IDbCommand而不是:

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

// ...

dbCommandMock.VerifyAll();
Run Code Online (Sandbox Code Playgroud)