![](/img/trans.png)
[英]How to make Mock return a new list every time the method is called using Moq
[英]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.