【发布时间】:2018-08-07 22:38:26
【问题描述】:
我正在尝试为DocumentDBRepository 分页代码编写单元测试。由于FeedResponse 中涉及到延续令牌,我需要模拟FeedResponse 以便为FeedResponse.ContinuationToken 赋予一些价值。但问题是我收到一条错误消息:
消息:System.ArgumentException:构造函数参数不能 为接口模拟传递。
这是否意味着我无法模拟FeedResponse?还是我使用FeedResponse的方式不对?
这是我的代码:
var response = new Mock<IFeedResponse<T>>(expected);
response.Setup(_ => _.ResponseContinuation).Returns(It.IsAny<string>());
var mockDocumentQuery = new Mock<IFakeDocumentQuery<T>>();
mockDocumentQuery
.SetupSequence(_ => _.HasMoreResults)
.Returns(true)
.Returns(false);
mockDocumentQuery
.Setup(_ => _.ExecuteNextAsync<T>(It.IsAny<CancellationToken>()))
.Returns((Task<FeedResponse<T>>)response.Object);
当我调试时,断点停在var response = new Mock<IFeedResponse<T>>(expected);,然后错误发生了。
【问题讨论】:
-
你正在模拟接口,所以你不需要在创建模拟时传递类的构造函数参数。你只需要做
var response = new Mock<IFeedResponse<T>>(); -
@ChetanRanpariya 嗯,因为
expected是 CosmosDB 的预期返回值,那么我应该在哪里传递这个值? -
在为 mock 安排期望时需要将其设置为返回值。
-
@WendyW。您可以使用
FeedResponse的实际实例。无需嘲笑它。类似于我在此处stackoverflow.com/a/49911733/5233410 对我们之前的问题之一给出的答案之一 -
@Nkosi 我确实尝试过,但由于我有 FeedResponse.ContinuationToken,它破坏了单元测试。所以我必须弄清楚如何在测试中为 feed 响应放置令牌的值..
标签: c# azure unit-testing moq azure-cosmosdb