Moq Insert/Update 新对象初始化
Moq Insert/Update with new Object initialization
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;
}
}
id
在调试单元测试用例时为 0,但在正确调用时 returns 正确的主键,即 1、2、3 等
模拟
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
}
}
调试单元测试时,似乎回调在通过方法 Insert()
.
时无法将 id
更改为 1
任何人都可以帮助解决这个问题吗?
不需要
User dumpUser= new User()
{
Name = "Def",
Number = "8111"
};
作为被测方法creates/initializes它是自己的实例。
捕获回调中传递的参数并在那里更新所需的成员
//...
userRepo
.Setup(x => x.Insert(It.IsAny<User>()))
.Callback((User arg) => arg.Id = 1);
//...
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;
}
}
id
在调试单元测试用例时为 0,但在正确调用时 returns 正确的主键,即 1、2、3 等
模拟
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
}
}
调试单元测试时,似乎回调在通过方法 Insert()
.
id
更改为 1
任何人都可以帮助解决这个问题吗?
不需要
User dumpUser= new User()
{
Name = "Def",
Number = "8111"
};
作为被测方法creates/initializes它是自己的实例。
捕获回调中传递的参数并在那里更新所需的成员
//...
userRepo
.Setup(x => x.Insert(It.IsAny<User>()))
.Callback((User arg) => arg.Id = 1);
//...