如何解决带有预处理器的模拟中介
鉴于我首先使用预处理器获取数据,我很难弄清楚如何最好地模拟我的请求和中介。
我已尝试遵循此方法 (https://letienthanh0212.medium.com/cqrs-and-mediator-in-net-core-project-c0b477eab6e9),但是,我遇到了找不到 Mediator Send 方法的异常。我的设置代码如下:
`public GetCoachEntriesTest() { CreateMockEntries();
_autoMocker = new AutoMocker();
_autoMocker.GetMock<ICoachEntryDataAccess>()
.Setup(x => x.QueryBuilder())
.Returns(new TestQueryBuilder(new Dictionary<string,object> {
{ENTRY_ID_1,COACH_ENTRY_1},{ENTRY_ID_2,COACH_ENTRY_2}
})
);
mediator = new Mock<IMediator>();
}`
在我的测试中,我试图这样称呼它:
[Test]
[Order(1)]
public async Task AssertEntriesArePresent()
{
CorrectRequest = new GetCoachEntryByUserRequest
{
UserId = USER_ID
};
mediator.Setup(x => x.Send(It.IsAny<GetCoachEntryByUserRequest>(),It.IsAny<CancellationToken>()))
.ReturnsAsync(new GetCoachEntryByUserResponse())
.Verifiable("Request not sent");
var controller = new CoachEntryController(mediator.Object);
await controller.GetUserEntries(USER_ID); //<-- exception here
var entries = CorrectRequest.Entries();
Assert.IsTrue(entries != null);
Assert.IsTrue(entries.Count >= 2);
}
我在这里实例化我的控制器的原因是因为我想将数据发送到中介并让它通过预处理器。预处理器确实为我自己的组织提供了一些自定义包,但对于特定请求的处理程序,它看起来也是如此。
public SetCoachEntry(ICoachEntryDataAccess dataAccess)
{
_dataAccess = dataAccess;
}
public async Task Process(GetCoachEntryByUserRequest request,CancellationToken cancellationToken)
{
await ProcessGetCoachEntries(request,cancellationToken);
}
private async Task ProcessGetCoachEntries(
ContextualRequest request,CancellationToken cancellationToken)
{
var item = request as GetCoachEntryByUserRequest;
if(!String.IsNullOrEmpty(item.UserId))
{
var query = await _dataAccess.QueryBuilder()
.SetPartitionKey(item.UserId)
.ExecuteAsync(cancellationToken)
.ForAwait();
var result = query.AsModels<CoachEntry>() ?? new List<CoachEntry>();
request.AddOrUpdateContextValue(result);
}
}
如何在测试中正确设置管道以使其能够通过预处理器通过模拟中介发送请求?我的理解是预处理器是第一个得到处理的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。