簡體   English   中英

用 List 模擬一個方法<int>作為參數並使用 Moq 返回 List&lt;&gt;

[英]Mock a method with List<int> as parameter and return List<> with Moq

在我的測試中,我將List<IUser>定義為數據,其中包含一些記錄。

我想為 GetList 方法設置最小起訂量,此方法接收List<int>作為參數。 這是一個 Id 列表; 我想在List<IUser>返回帶有這些 Id 的 IUser 列表

我試過了,但我沒有找到正確的 Returns 語法

Mock<IUsers> mockUserRepository = new Mock<IUsers>();
_mockUserRepository.Setup(m => m.GetListAll(It.IsAny<List<int>>())).Returns(????????);

我試過這樣的事情:

_mockUserRepository.Setup(m => m.GetListAll(It.IsAny<List<int>>())).Returns(u =>_users.Contains(???));

謝謝,

class User : IUser
{
    public int Id { get; set; }
    public string Firsname { get; set; }
    public string Lastname { get; set; }
}

interface IUser
{
    int Id { get; set; }
    string Firsname { get; set; }
    string Lastname { get; set; }
}

interface IAction
{
    List<IUser> GetList(List<int> listId);
}

class Action : IAction
{

    public List<IUser> GetList(List<int> listId)
    {
        //....
    }
}

嘗試這個:

mock.Setup(users => users.GetListAll(It.IsAny<List<int>>()))
            .Returns<List<int>>(ids =>
                {
                    return _users.Where(user => ids.Contains(user.Id)).ToList();
                });

如果您有多個作為一個過濾器參數,您可以使用此示例

mock.Setup(o => o.GetListAllAsync(It.IsAny<List<int>>(), It.IsAny<string>())
 .ReturnsAsync((int[] ids, string firstname) =>
 {
   return _users
          .Where(user => ids.Contains(user.Id) && user.Firstname.Equals(firstname))
          .ToList();
 });

只需返回准備好的列表:

_mockUserRepository.Setup(m => m.GetListAll(It.IsAny<List<int>>())).Returns(_users);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM