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

标签 c# .net unit-testing mocking moq

我正在尝试模拟 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/

相关文章:

reactjs - 如何使用 Jest 和 Enzyme 对包含 History.push 的 React 事件处理程序进行单元测试?

c# - 使用 LINQ 排序不同的值

asp.net - 与开发服务器(Cassini)相比,IIS 中的 RegEx.Match 慢得多?

c# - 使用 C# 获取数据库索引号时出错,显示 -1

.net - 从ASP.NET MVC 4更新到MVC 5的 View 中没有Intellisense

android - 有没有一种方法可以用 Robolectric 测试拾取器?

database - 我如何开始使用 PHPUnit,其中我的类构造需要预配置的数据库连接?

c# - 中继器内的单选按钮总是返回 false

c# - 按两个变量对列表进行排序

c# - 在单元测试中模拟 HttpPostedFile