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);

//...