模拟使用 Moq 返回 void 的 update 方法

在我的测试中,我将 List<IUser>定义为数据,在。

我想设置一个 moq 的方法 Update,这个方法接收用户 idstring更新。

然后我得到 IUser并更新属性 LastName

我试过了:

namespace Tests.UnitTests
{
[TestClass]
public class UsersTest
{
public IUsers MockUsersRepo;
readonly Mock<IUsers> _mockUserRepo = new Mock<IUsers>();
private List<IUser> _users = new List<IUser>();


[TestInitialize()]
public void MyTestInitialize()
{
_users = new List<IUser>
{
new User { Id = 1, Firsname = "A", Lastname = "AA", IsValid = true },
new User { Id = 1, Firsname = "B", Lastname = "BB", IsValid = true }
};


Mock<IAction> mockUserRepository = new Mock<IAction>();
_mockUserRepo.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>()))
.Returns(???);


MockUsersRepo = _mockUserRepo.Object;
}


[TestMethod]
public void Update()
{
//Use the mock here
}


}
}

但是我得到了这个错误: 无法解析“返回”符号

查到身份了吗?

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


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


interface IAction
{
List<IUser> GetList(bool isActive);
void Update(int id, string lastname)
}


class Action : IAction
{
public IUser GetById(int id)
{
//....
}
public void Update(int id, string lastname)
{
var userToUpdate = GetById(id);
userToUpdate.LastName = lastname;
//....
}
}
108513 次浏览

如果只想验证调用了此方法,则应该使用 Verified ()方法。

_mockUserRepository.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>()))
.Verifiable();

如果您还想对这些参数执行某些操作,请首先使用 Callback ()。

_mockUserRepository.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>()))
.Callback((int id, string lastName) => {
//do something
}).Verifiable();

更新

如果结果返回 bool 值,那么应该这样模仿它。

_mockUserRepository.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>()))
.Returns(true);
Mock<IUsers> _mockUserRepository = new Mock<IUsers>();
_mockUserRepository.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>()))
.Callback((int id, string name) =>
{
//Your callback method here
});
//check to see how many times the method was called
_mockUserRepository.Verify(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>()), Times.Once());