好的,我有一个奇怪的问题。
我在 C# 测试项目中使用 NUnit 和 Moq。我认为您可以忽略模拟对象,因为真正的问题在于 UserManager.AddUser() 没有正确执行。
以下代码将永远不会到达 UserManager.AddUser() 开始处的断点,因此由于 NullPointerException 将导致 Assertion 失败。
[Test]
enter code here
public void AddUser_NoPassword_GeneratesPassword()
{
//assert
var userRepositoryFake = new Mock<IUserRepository>();
userRepositoryFake.Setup(x => x.GetUser(It.IsAny<string>(), It.IsAny<bool>())).Returns((User)null);
userRepositoryFake.Setup(x => x.SaveUser(It.IsAny<User>())).Returns(new Mock<User>().Object);
var userManager = new UserManager(userRepositoryStub.Object);
var createUserViewModel = new CreateUserViewModel { Username = "username" };
//act
var validationErrors = userManager.AddUser(createUserViewModel);
//assert
Assert.IsNotNullOrEmpty(createUserViewModel.Password);
}
但是,如果我添加这个断言:
//assert
Assert.IsEmpty(validationErrors); //new assertion
Assert.IsNotNullOrEmpty(createUserViewModel.Password);
到达 AddUser() 中的断点,测试成功。似乎测试根本不执行 AddUser() ,除非它的返回值用于某些事情。