因此,我再次尝试使用其他控制器来使用NUnit和Moq测试可可桌面应用程序。问题是,即使执行了.add()操作,我仍然没有使用模拟添加的内容。更确切地说,这就是我的模拟方式:
User user = new User
{
email = "[email protected]",
password = "1",
firstName = "Test",
lastName = "Test"
};
List<User> dataSource = new List<User>();
var userServiceMock = new Mock<IUserService>(MockBehavior.Strict);
userServiceMock.Setup(x => x.add(It.IsAny<User>()));
userServiceMock.Setup(x => x.getAllUsers()).Returns(dataSource);
var controller = new CreateAccountCoreController(userServiceMock.Object);
//act
controller.submit();
//assert
Assert.That(dataSource.Contains(user));
并且在控制器中是这个:
readonly IUserService userService;
public CreateAccountCoreController(IUserService userService)
{
this.userService = userService;
}
public void submit()
{
User user = new User
{
email = "[email protected]",
password = "1234",
firstName = "Test",
lastName = "Test",
};
userService.add(user);
List<User> users = userService.getAllUsers();
/*users it is empty here..*/
}
所以我的测试总是失败,因为即使在.add操作之后,它的用户列表也为空。你能帮忙吗?
[没有地方可以填充dataSource
集合,并且您配置了模拟以从getAllUsers()
模拟返回它。因此,您总是会从方法中得到一个空集合。
使用Callback()
方法配置预期的行为:
Callback()
现在,您的模拟userServiceMock.Setup(x => x.add(It.IsAny<User>())).Callback((User u) => dataSource.Add(u));
设置不会执行任何操作,因此您永远不会看到将用户添加到数据源中。要更正此问题,您可以使用回叫添加用户,但要了解您对此的测试并不多:
add