Invocación simulada de verificación ()

Estoy probando unidades para ver si se llama a un método.

[Fact]
        public void Can_Save_Project_Changes()
        {
            //Arrange
            var user = new AppUser() { UserName = "JohnDoe", Id = "1" };
            Mock<IRepository> mockRepo = new Mock<IRepository>();
            Mock<UserManager<AppUser>> userMgr = GetMockUserManager();
            userMgr.Setup(x => x.FindByNameAsync(It.IsAny<string>())).ReturnsAsync(new AppUser() { UserName = "JohnDoe", Id = "1" });
            var contextUser = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.Name, user.UserName),
                new Claim(ClaimTypes.NameIdentifier, user.Id),
            }));
            Mock<ITempDataDictionary> tempData = new Mock<ITempDataDictionary>();
            ProjectController controller = new ProjectController(mockRepo.Object, userMgr.Object)
            {
                TempData = tempData.Object,
                ControllerContext = new ControllerContext
                {
                    HttpContext = new DefaultHttpContext() { User = contextUser }
                }
            };

            Project project = new Project()
            {
                Name = "Test",
                UserID = "1",
            };

            //Act
            Task<IActionResult> result = controller.EditProject(project);

            //Assert

            mockRepo.Setup(m => m.SaveProject(It.IsAny<Project>(), user));
            //This line still throws an error
            mockRepo.Verify(m => m.SaveProject(It.IsAny<Project>(), user));
            Assert.IsType<Task<IActionResult>>(result);
            var view = result.Result as ViewResult;
            Assert.Equal("ProjectCharts", view.ViewName);
            Assert.Equal("Project", view.Model.ToString());
        }

Durante la depuración, puedo verificar que el método se llame realmente en el controlador,

//This controller line is touched walking through the code
repository.SaveProject(project, user);

//but this repo line is not touched
public void SaveProject(Project project, AppUser user)      

La depuración en realidad no muestra la entrada al método del repositorio. El error exacto está debajo

Invocación esperada en el simulacro al menos una vez, pero nunca se realizó: m => m.SaveProject (, JohnDoe)

No hay configuraciones configuradas. Invocaciones realizadas: IRepository.ProjectClass IRepository.SaveProjects (ProjectClass, JohnDoe) '

Cuando hago una prueba de integración real, elSaveProject El método se toca en el repositorio y parece funcionar correctamente. También he intentado asignar cadaProject propiedad dentro de la prueba unitaria pero obtuvo el mismo resultado de error

Respuestas a la pregunta(2)

Su respuesta a la pregunta