2012-09-06 34 views
3

我试图模拟SqlConnection,其实质上是IDbConnectionC# - Moq - 模拟接口的对象是代理而不是暴露的类

对于我准备我假装为我的测试:

var dbConnectionMock = new Mock<IDbConnection>();

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

var repository = new XxxRepository(dbConnectionMock.Object);


构造函数库套这prope RTY:

private IDbConnection Connection { get; set; }

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

var command = Connection.CreateCommand();

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

我该如何避免使用代理?

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

+1

无论是抽象ado.net自己的对象中,或者使用一个实际的连接。试图模拟ado.net比它的价值更麻烦。 –

回答

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(); 
相关问题