问题描述
鉴于我首先使用预处理器获取数据,我很难弄清楚如何最好地模拟我的请求和中介。
我已尝试遵循此方法 (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 (将#修改为@)