返回最小起订量列表的子集

Returning Subset Of List in Moq

我想测试一个 return 复杂类型列表的函数。所以我需要最小起订量来模拟这个功能。函数是
IEnumerable (Worker> ReadWorkerList(AcademicTitle title);

在最小起订量的设置部分,我创建了一个人工 Worker 列表 (code-1) 并且我无法指示 moq return 满足参数中 AcademicTitle 标准的工人列表的子集。 (代码-2)

我已阅读以下网址,但找不到解决方案。

Moq Return using Where() Mock object returning a list of mocks with Moq MOQ C# QUERIES It.IsAny returning a List Overloaded return values in MOQ

工人定义:

public class Worker
{

    public string Name { get; set; }

    public string Surname { get; set; }       

    public AcademicTitle Title { get; set; }

}

//Moq implementation: (code-1)
internal static Mock<IWorkerRepository> GetIWorkerRepository ()
{

   try
   {
      if (_workerRepositoryMock == null)
      {
         //artifical worker list
         List<Worker> workerList = new List<Worker>() {
             new Worker("name1", "surname1",AcademicTitle.Doctor),
             new Worker("name2", "surname2",AcademicTitle.Empty),
             new Worker("name3", "surname3",AcademicTitle.AssociateProfessor),
             new Worker("name4", "surname4",AcademicTitle.Professor),


         };

         _workerRepositoryMock = new Mock<IWorkerRepository>();
         _workerRepositoryMock.Setup(m => m.ReadWorkerList(It.IsAny<AcademicTitle>())).Returns(new List<Worker>());

         //Code -2

         _workerRepositoryMock.Setup(m => m.ReadWorkerList(It.Is<AcademicTitle>(v=>v != AcademicTitle.Empty))).Returns(workerList.Where(p=>p.Title  == v));


        }
           return _workerRepositoryMock;

    }catch (Exception hata)
    {
         throw hata;
    }

}

预期的结果是,当我使用特定的 AcademicTitle 参数调用 ReadWorkerList 函数时,比方说 Professor,只有一个列表包含 name4 应该 returned.

应该可以,试试这个:

_workerRepositoryMock
    .Setup(m => m.ReadWorkerList(It.Is<AcademicTitle>(v => v != AcademicTitle.Empty)))
    .Returns((AcademicTitle v) => workerList.Where(p => p.Title == v));