【问题标题】:Returning Subset Of List in Moq在 Moq 中返回列表的子集
【发布时间】:2019-07-25 16:30:04
【问题描述】:

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

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

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

Return Subset of List that Matches Condition 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 的列表应该被退回。

【问题讨论】:

  • 可以分享ReadWorkerList方法的签名吗?
  • IEnumerable (Worker> ReadWorkerList(AcademicTitle title);对不起,有些字符打印不正确。

标签: c# moq


【解决方案1】:

应该可以,试试这个:

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

【讨论】:

  • 三个函数与ReadWorkerList中的函数同名,错误为“方法'IsAny'没有重载需要1个参数”
  • 应该是 _workerRepositoryMock.Setup(m => ReadWorkerList(It.Is(v => v != AcademicTitle.Empty))) .Returns((AcademicTitle v) => calisanListe.其中(p => p.Title == v));请注意,使用 It.Is 代替 It.IsAny。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多