为什么添加操作不适用于Mock?

问题描述 投票:0回答:2

因此,我再次尝试使用其他控制器来使用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操作之后,它的用户列表也为空。你能帮忙吗?

c# .net nunit moq
2个回答
1
投票

[没有地方可以填充dataSource集合,并且您配置了模拟以从getAllUsers()模拟返回它。因此,您总是会从方法中得到一个空集合。

使用Callback()方法配置预期的行为:

Callback()

0
投票

现在,您的模拟userServiceMock.Setup(x => x.add(It.IsAny<User>())).Callback((User u) => dataSource.Add(u)); 设置不会执行任何操作,因此您永远不会看到将用户添加到数据源中。要更正此问题,您可以使用回叫添加用户,但要了解您对此的测试并不多:

add
© www.soinside.com 2019 - 2024. All rights reserved.