3

私はモックしようとしています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()が呼び出されたことだけです。

4

1 に答える 1

5

プロパティがタイプであるためSqlConnection、問題は の使用にある可能性があります。代わりにモックを返すようにしてください:ConnectionSqlConnectionIDbCommand

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

// ...

dbCommandMock.VerifyAll();
于 2012-09-06T12:32:47.983 に答える