C# 使用新对象初始化插入/更新Moq
当调试单元测试用例时,C# 使用新对象初始化插入/更新Moq,c#,unit-testing,mocking,nunit,moq,C#,Unit Testing,Mocking,Nunit,Moq,当调试单元测试用例时,id为0,但当它是正确的调用时,它返回正确的主键,即1、2、3等 Mock public class UserService { IUserRepo userRepo; UserService(IUserRepo repo) { userRepo = repo; } void AddUser(JsonData data) { User user = new User() {
id
为0,但当它是正确的调用时,它返回正确的主键,即1、2、3等
Mock
public class UserService
{
IUserRepo userRepo;
UserService(IUserRepo repo)
{
userRepo = repo;
}
void AddUser(JsonData data)
{
User user = new User()
{
Name = data.name,
Number = data.Number
};
userRepo.Insert(user);
int id = user.id;
}
}
类测试用例
{
Mock mockUserRepo=new Mock();
[测试]
公共void test1()
{
//安排
JsonData obj=新JsonData()
{
Name=“Jane”,
Number=“0563722992”
}
用户dumpUser=新用户()
{
Name=“Def”,
Number=“8111”
};
mockUserRepo
.Setup(x=>x.Insert(It.IsAny()))
.Callback(()=>dumpUser.Id=1);
//表演
UserService u=新的UserService(mockUserRepo.Object);
u、 AddUser(obj);
//断言
}
}
在调试单元测试时,当回调通过方法Insert()
时,它似乎无法将id
更改为1
有人能帮助解决这个问题吗?没有必要
class TestCases
{
Mock<IUserRepo> mockUserRepo = new Mock<IUserRepo>();
[Test]
public void test1()
{
//Arrange
JsonData obj = new JsonData()
{
Name = "Jane",
Number = "0563722992"
}
User dumpUser= new User()
{
Name = "Def",
Number = "8111"
};
mockUserRepo
.Setup(x => x.Insert(It.IsAny<User>()))
.Callback(() => dumpUser.Id = 1);
//Act
UserService u = new UserService(mockUserRepo.Object);
u.AddUser(obj);
//Assert
}
}
当被测试的方法在中创建/初始化它自己的实例时
捕获回调中传递的参数,并在那里更新所需的成员
User dumpUser= new User()
{
Name = "Def",
Number = "8111"
};
/。。。
用户报告
.Setup(x=>x.Insert(It.IsAny()))
.Callback((用户参数)=>arg.Id=1);
//...
您正在更改“dumpUser”的id,而不是在您的服务中创建的用户。
//...
userRepo
.Setup(x => x.Insert(It.IsAny<User>()))
.Callback((User arg) => arg.Id = 1);
//...