Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带预处理器的模拟中介器_C#_Mediator - Fatal编程技术网

C# 带预处理器的模拟中介器

C# 带预处理器的模拟中介器,c#,mediator,C#,Mediator,考虑到我使用预处理器首先获取数据,我很难弄清楚如何最好地模拟我的请求和中介 我尝试了以下方法()但是,我得到了一个中介发送方法not found的异常。我的设置代码如下: `公共GetCoachEntriesTest() { CreateMockEntries() \u autoMocker=new autoMocker(); _autoMocker.GetMock() .Setup(x=>x.QueryBuilder()) .Returns(新TestQueryBuilder(新字典{ {EN

考虑到我使用预处理器首先获取数据,我很难弄清楚如何最好地模拟我的请求和中介

我尝试了以下方法()但是,我得到了一个中介发送方法not found的异常。我的设置代码如下:

`公共GetCoachEntriesTest() { CreateMockEntries()

\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);
            }
        }