2012-09-06 49 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(); 
相關問題