【问题标题】:Creating mock for Document Client为文档客户端创建模拟
【发布时间】:2019-11-25 00:41:56
【问题描述】:

我正在使用 xUnit 和 Moq 编写单元测试。我的测试类有一个属性

public DocumentClient documentClient {get; set;}

我正在尝试使用 Moq 模拟此属性并尝试模拟 DocumentClient 的 OpenAsync 方法。这就是我创建 Mock 对象的方式。

var documentClientObj = new Mock<DocumentClient>();

但我收到一条错误消息,提示“System.NotSupportedException:要模拟的类型必须是接口或抽象或非密封类”

【问题讨论】:

  • 问题是DocumentClientsealed类。这在起订量中是严格禁止的。您可以将所需功能提取为interface,然后尝试模拟它...
  • 但是我需要 DocumentClient 类型本身,因为我稍后会使用它来创建 BulkExecutor。我没有选择使用 IDocumentClient 接口。

标签: moq azure-cosmosdb xunit


【解决方案1】:

DocumentClient 既不是抽象类也不是接口。这意味着模拟库不能创建代理实现。如果你坚持上课,你就不能嘲笑它。

但是,Cosmos DB 库中有 IDocumentClient 接口,这是 DocumentClient 类正在实现的。你应该切换到那个,然后你就可以模拟它了。

【讨论】:

  • 但是 IDocumentClient 里面没有 OpenAsync 方法。
  • OpenAsync 方法将做的只是访问数据库一次以创建必要的内部缓存和连接。对数据库的任何调用都应在DocumentClient 中自动生成相同的缓存。您可以编写自己的OpenAsync 方法。 OpenAsync 方法所做的只是循环遍历ColletionFeedReader 并读取集合。这是OpenAsync source
  • 我还需要 DocumentClient 类型本身,因为我稍后会使用它来创建 BulkExecutor。我没有选择使用 IDocumentClient 接口
  • @DevMJ 你确实做到了。您可以在 BulkExecutor 需要使用它时强制转换它。要么就是这样,要么根本就没有嘲笑。没有别的办法。
猜你喜欢
  • 2011-10-17
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-15
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2018-08-26
相关资源
最近更新 更多