C# 带预处理器的模拟中介器
考虑到我使用预处理器首先获取数据,我很难弄清楚如何最好地模拟我的请求和中介 我尝试了以下方法()但是,我得到了一个中介发送方法not found的异常。我的设置代码如下: `公共GetCoachEntriesTest() { CreateMockEntries()C# 带预处理器的模拟中介器,c#,mediator,C#,Mediator,考虑到我使用预处理器首先获取数据,我很难弄清楚如何最好地模拟我的请求和中介 我尝试了以下方法()但是,我得到了一个中介发送方法not found的异常。我的设置代码如下: `公共GetCoachEntriesTest() { CreateMockEntries() \u autoMocker=new autoMocker(); _autoMocker.GetMock() .Setup(x=>x.QueryBuilder()) .Returns(新TestQueryBuilder(新字典{ {EN
\u autoMocker=new autoMocker();
_autoMocker.GetMock()
.Setup(x=>x.QueryBuilder())
.Returns(新TestQueryBuilder(新字典{
{ENTRY_ID_1,COACH_ENTRY_1},
{ENTRY_ID_2,COACH_ENTRY_2}
})
);
mediator=newmock();
}`
在我的测试中,我试着这样称呼它:
[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);
}
[测试]
[命令(1)]
公共异步任务AssertEntriesArePresent()
{
CorrectRequest=新的GetCoachEntryByUserRequest
{
UserId=USER\u ID
};
mediator.Setup(x=>x.Send(It.IsAny(),It.IsAny())
.ReturnsAsync(新的GetCoachEntryByUserResponse())
.可验证(“未发送请求”);
var控制器=新的CoachEntryController(mediator.Object);
等待控制器.GetUserEntries(用户ID);/=2);
}
我在这里实例化控制器的原因是,我想将数据发送到mediator并让它通过预处理器。预处理器确实为我自己的组织提供了一些自定义包,但对于特定请求的处理程序,它看起来也是如此
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);
}
}
public setCoachEntryDataAccess(ICoachEntryDataAccess数据访问)
{
_dataAccess=dataAccess;
}
公共异步任务进程(GetCoachEntryByUserRequest请求,CancellationToken CancellationToken)
{
等待处理GetCoachEntries(请求、取消令牌);
}
专用异步任务进程GetCoachEntries(
上下文请求请求,
取消令牌(取消令牌)
{
var item=请求作为GetCoachEntryByUserRequest;
如果(!String.IsNullOrEmpty(item.UserId))
{
var query=wait_dataAccess.QueryBuilder()
.SetPartitionKey(item.UserId)
.ExecuteAsync(取消令牌)
.ForAwait();
var result=query.AsModels()??new List();
request.AddOrUpdateContextValue(结果);
}
}
如何在测试中正确设置管道,以便通过模拟的中介程序通过预处理器发送请求?我的理解是,预处理器是第一件需要处理的事情。据我所知,您正在这里进行集成测试。在这种情况下,您可以使用Microsoft提供的集成测试包。它允许您通过旋转内存中的web服务器来对控制器运行测试
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);
}
}