C# 如何设置mockRepository return方法以返回IEnumerable<;T>;?

C# 如何设置mockRepository return方法以返回IEnumerable<;T>;?,c#,asp.net-mvc,unit-testing,mocking,moq,C#,Asp.net Mvc,Unit Testing,Mocking,Moq,我是MOQ新手,之前我已经做过一些编码,但这次我需要在我创建的任务列表中返回2个对象。我尝试使用mockRepository.SetReturnsDefault()命令,但不知何故,它与我编程的方式不一样。我使用这个测试创建两个不同的任务,我只需要更新我创建的第一个任务(taskPrev) 我创建了一个处理程序来创建异常,这样我就不能创建与其他任务和其他业务规则重叠的任务,并且该测试我正在尝试更新以前的任务并应返回success,但当我运行测试时,它将返回我添加到任务列表中的所有任务,即使我正在

我是MOQ新手,之前我已经做过一些编码,但这次我需要在我创建的任务列表中返回2个对象。我尝试使用mockRepository.SetReturnsDefault()命令,但不知何故,它与我编程的方式不一样。我使用这个测试创建两个不同的任务,我只需要更新我创建的第一个任务(taskPrev)

我创建了一个处理程序来创建异常,这样我就不能创建与其他任务和其他业务规则重叠的任务,并且该测试我正在尝试更新以前的任务并应返回success,但当我运行测试时,它将返回我添加到任务列表中的所有任务,即使我正在使用函数筛选这些任务

我用来过滤的部分是var tasks=await\u repository.FindBy(x=>x.Id!=command.Id)但它只返回所有这两个任务,而不进行过滤

我想知道我是否用错了最小起订量,或者是其他原因,因为我已经搜索了很多Forun,但没有找到任何可以帮助我的东西

以下是我配置moq以返回列表的方式:

//Criar 1ª Task
Task taskPrev = new Task(taskTypeId, projectId, costCenterId, Convert.ToDateTime(date), 
        startHour, startMinute, endHour, endMinute, workItem, timeSheetId, description);
taskPrev.Id = taskId;
//Criar 2ª Task
Task taskCurr = new Task(taskTypeId, projectId, costCenterId, Convert.ToDateTime(date), 
        endHour, startMinute, Convert.ToByte(endHour + 1), endMinute, workItem, timeSheetId, description);
taskCurr.Id = taskId + 1;

List<Task> tasks = new List<Task>();
tasks.Add(taskPrev);
tasks.Add(taskCurr);
// mockRepository.SetReturnsDefault(System.Threading.Tasks.Task.FromResult((IEnumerable<Task>)tasks));
mockRepository.Setup(x => x.FindBy(x => It.IsAny<IAsyncRepository<Task>>())).Returns(System.Threading.Tasks.Task.FromResult((IEnumerable<Task>)tasks.Where(x => x.Id == taskCurr.Id)));
//Criar 1ª任务
Task taskPrev=新任务(taskTypeId、projectId、costCenterId、Convert.ToDateTime(日期),
startHour、startMinute、endHour、endMinute、workItem、timeSheetId、description);
taskPrev.Id=taskId;
//Criar 2-任务
Task taskCurr=新任务(taskTypeId、projectId、costCenterId、Convert.ToDateTime(日期),
endHour,startMinute,Convert.ToByte(endHour+1),endMinute,workItem,timeSheetId,description);
taskCurr.Id=taskId+1;
列表任务=新列表();
tasks.Add(taskPrev);
tasks.Add(taskCurr);
//mockRepository.SetReturnsDefault(System.Threading.Tasks.Task.FromResult((IEnumerable)Tasks));
mockRepository.Setup(x=>x.FindBy(x=>It.IsAny()).Returns(System.Threading.Tasks.Task.FromResult((IEnumerable)Tasks.Where(x=>x.Id==taskCurr.Id));
使用mockRepository.SetReturnsDefault()返回两个任务并不进行筛选; 使用mockRepository.SetReturnsDefault()mockRepository.Setup()与仅使用SetReturnsDefault()相同; 并且仅使用mockRepository.Setup()返回空

我正在使用的测试代码:

[Theory]
[InlineData(1,1,1,"2020-03-25",9,0,10,0,"",1,"valor",1,5)]
[InlineData(2,2,2,"2020-03-28",11,0,12,0,"Valor",2,"valor",3,6)]
[InlineData(3,4,5,"2020-03-04",13,0,14,0,"",6,"valor",7,7)]
//Deve permitir editar uma task criada anteriormente a nova task
//EX: 1ª task finaliza as 10:00 e a nova inicia as 10:00, deve permitir uma alteração da 1ª task
public async void Update_PreviousTask_Return_Success_When_CurrentTask_HasStartHour_Equals_PreviousTask_EndHour(
    int taskTypeId, int projectId, int costCenterId, string date, byte startHour, byte startMinute,
    byte endHour, byte endMinute, string workItem, int timeSheetId, string description, int employeeId, int taskId)
    {
        //São necessários apenas para criação do handler
        var mockRepository = new  Mock<IAsyncRepository<Task>>();
        var mockRepositoryTimeSheet = new  Mock<IAsyncRepository<TimeSheet>>();
        var mockRepositoryProject = new  Mock<IAsyncRepository<Project>>();            

        //Cria handler
        TaskHandler handler = new TaskHandler(mockRepository.Object, 
        mockRepositoryTimeSheet.Object, mockRepositoryProject.Object);

        //Cria Project
        Project project = new Project("nameProject", 1, true, 1);
        project.Id = projectId;

        // List<Project> projects =new List<Project>();
        // projects.Add(project);
        mockRepositoryProject.SetReturnsDefault(System.Threading.Tasks.Task.FromResult(project));   

        //Cria timeSheet 
        TimeSheet timeSheet = new TimeSheet(1, Convert.ToDateTime(date).AddDays(-30), Convert.ToDateTime(date).AddDays(30), employeeId);
        timeSheet.Id = timeSheetId;

        List<TimeSheet> timeSheets = new List<TimeSheet>();
        timeSheets.Add(timeSheet);
        mockRepositoryTimeSheet.SetReturnsDefault(System.Threading.Tasks.Task.FromResult((IEnumerable<TimeSheet>)timeSheets));

        //Criar 1ª Task
        Task taskPrev = new Task(taskTypeId, projectId, costCenterId, Convert.ToDateTime(date), 
                startHour, startMinute, endHour, endMinute, workItem, timeSheetId, description);
        taskPrev.Id = taskId;
        //Criar 2ª Task
        Task taskCurr = new Task(taskTypeId, projectId, costCenterId, Convert.ToDateTime(date), 
                endHour, startMinute, Convert.ToByte(endHour + 1), endMinute, workItem, timeSheetId, description);
        taskCurr.Id = taskId + 1;

        List<Task> tasks = new List<Task>();
        tasks.Add(taskPrev);
        tasks.Add(taskCurr);
        // mockRepository.SetReturnsDefault(System.Threading.Tasks.Task.FromResult((IEnumerable<Task>)tasks));
        mockRepository.Setup(x => x.FindBy(x => It.IsAny<IAsyncRepository<Task>>())).Returns(System.Threading.Tasks.Task.FromResult((IEnumerable<Task>)tasks.Where(x => x.Id == taskCurr.Id)));

        //Command para criar a task
        UpdateTaskCommand command = new UpdateTaskCommand(taskTypeId, projectId, costCenterId, Convert.ToDateTime(date),
        startHour, startMinute, endHour, endMinute, workItem, "descrição Teste", taskId, employeeId);

        //Act
        var retorno = (CommandResult)await handler.Handle(command);

        //Assert
        Assert.True(retorno.Sucess);
        }
[理论]
[InlineData(1,1,1,“2020-03-25”,9,0,10,0,”,1,“valor”,1,5)]
[InlineData(2,2,2,“2020-03-28”,11,0,12,0,“Valor”,2,“Valor”,3,6)]
[InlineData(3,4,5,“2020-03-04”,13,0,14,0,”,6,“valor”,7,7)]
//制定一项新的任务
//例如:1ª任务定稿为10:00 e新伊尼亚任务定稿为10:00,完成1ª任务
公共异步无效更新\u PreviousTask\u返回\u成功\u当前任务\u HasStartHour\u等于\u PreviousTask\u EndHour(
int taskTypeId、int projectId、int costCenterId、字符串日期、字节startHour、字节startMinute、,
字节endHour、字节endMinute、字符串工作项、int timeSheetId、字符串描述、int employeeId、int taskId)
{
//圣内塞斯里奥斯·阿佩纳斯·帕拉·克莱昂·多德勒(Stço Necesários apenas para criaço do handler)
var mockRepository=new Mock();
var mockRepositoryTimeSheet=new Mock();
var mockRepositoryProject=new Mock();
//Cria处理程序
TaskHandler=新的TaskHandler(mockRepository.Object,
mockRepositoryTimeSheet.Object,mockRepositoryProject.Object);
//Cria项目
项目=新项目(“名称项目”,1,真,1);
project.Id=projectId;
//列表项目=新列表();
//项目。添加(项目);
mockRepositoryProject.SetReturnsDefault(System.Threading.Tasks.Task.FromResult(project));
//Cria时间表
时间表时间表=新时间表(1,Convert.ToDateTime(date).AddDays(-30),Convert.ToDateTime(date).AddDays(30),employeeId);
timeSheet.Id=timeSheetId;
列表时间表=新列表();
时间表。添加(时间表);
mockRepositoryTimeSheet.SetReturnsDefault(System.Threading.Tasks.Task.FromResult((IEnumerable)时间表));
//Criar 1任务
Task taskPrev=新任务(taskTypeId、projectId、costCenterId、Convert.ToDateTime(日期),
startHour、startMinute、endHour、endMinute、workItem、timeSheetId、description);
taskPrev.Id=taskId;
//Criar 2-任务
Task taskCurr=新任务(taskTypeId、projectId、costCenterId、Convert.ToDateTime(日期),
endHour,startMinute,Convert.ToByte(endHour+1),endMinute,workItem,timeSheetId,description);
taskCurr.Id=taskId+1;
列表任务=新列表();
tasks.Add(taskPrev);
tasks.Add(taskCurr);
//mockRepository.SetReturnsDefault(System.Threading.Tasks.Task.FromResult((IEnumerable)Tasks));
mockRepository.Setup(x=>x.FindBy(x=>It.IsAny()).Returns(System.Threading.Tasks.Task.FromResult((IEnumerable)Tasks.Where(x=>x.Id==taskCurr.Id));
//指挥一项任务
UpdateTaskCommand=new UpdateTaskCommand(taskTypeId、projectId、costCenterId、Convert.ToDateTime(日期),
startHour、startMinute、endHour、endMinute、workItem、“Descriptionção Teste”、taskId、employeeId);
//表演
var returno=(CommandResult)wait handler.Handle(command);
//断言
断言.True(否定.suces);
}
以及处理程序部件,该部件不能正常工作:

var tasks = await _repository.FindBy(x => x.Id != command.Id);
var retorno = tasks.FirstOrDefault(x => (x.TimeSheetId == command.TimeSheetId && x.Date.Date == command.Date.Date)
                                         &&
                                         (
                                             (
                                                 (new TimeSpan(x.StartHour, x.StartMinute, 0) <= new TimeSpan(command.StartHour, command.StartMinute, 0))
                                              && (new TimeSpan(x.EndHour, x.EndMinute, 0) > new TimeSpan(command.StartHour, command.StartMinute, 0))
                                              )
                                              ||
                                              (
                                                 (new TimeSpan(x.EndHour, x.EndMinute, 0) >= new TimeSpan(command.EndHour, command.EndMinute, 0))
                                              && (new TimeSpan(x.StartHour, x.StartMinute, 0) < new TimeSpan(command.EndHour, command.EndMinute, 0))
                                              )
                                              ||
                                              (
                                                 (new TimeSpan(x.StartHour, x.StartMinute, 0) >= new TimeSpan(command.StartHour, command.StartMinute, 0))
                                              && (new TimeSpan(x.EndHour, x.EndMinute, 0) <= new TimeSpan(command.EndHour, command.EndMinute, 0))
                                              )

                                         ));

if (retorno != null)
    throw new BusinessException("Não é permitido criar novos registros que se sobreponham a outros existentes", 
                                nameof(command.StartHour) + ", " + nameof(command.StartMinute) + ", " +
                                nameof(command.EndHour) + ", " + nameof(command.EndMinute), ErrorsEnum.ResourceInvalidField);
var tasks=await\u repository.FindBy(x=>x.Id!=command.Id);
var returno=tasks.FirstOrDefault(x=>(x.TimeSheetId==command.TimeSheetId&&x.Date.Date==command.Date.Date)
&&
(
(
(新的时间跨度(x.StartHour,x.StartMinute,0)新的时间跨度(command.StartHour,command.StartMinute,0))
)
var myMock = new Mock<IMyThing>();
myMock.Setup(m => m.GetById(7)).Returns(new Thing());
var myMock = new Mock<IMyThing>();
myMock.Setup(m => m.GetById(It.IsAny<int>())).Returns(new Thing());
mockRepository.Setup(x => x.FindBy(x => It.IsAny<IAsyncRepository<Task>>())).Returns(//stuff);
mockRepository.Setup(x => x.FindBy(It.IsAny<Func<Task,bool>>())).Returns(//stuff);