使用 NUnit 和 Moq 进行测试:用例

Testing Using NUnit and Moq: use case

我的企业 class 管理 USER 实体。

在这个 class 中,我有一个方法 return 单个用户的 id:

public Utente GetUser(int id)
{
    var utente = _userDataManager.GetUserById(id);

    return _mapper.Map<Utente>(utente);
}

_userDataManager是接口,IUSERDATAMANAGER,用DAL实现了class; GetUserById return 用户或 null(使用 EF6 进行的搜索)。

_mapper 是一个 IMAPPER 接口(自动映射器)。 方法 return 是映射对象。

我有两个问题:

  1. 测试这个方法有意义吗?

  2. 我应该模拟这两个对象吗?

一个黑盒示例将不胜感激。

Does it make sense to test this method?

如果值得编写代码,那么就值得测试代码。

Should I mock both the object?

在测试被测对象时,您模拟允许测试完成的依赖项。

例如

public void GetUser_Should_Return_Utente() {
    //Arrange
    var userId = 2;
    var user = new User {
        UserId = userId,
        //... other properties
    };
    var userDataManagerMock = new Mock<IUserDataManager>();
    userDataManagerMock.Setup(_ => _.GetUserById(userId)).Returns(user);

    var expected = new Utente {
        Id = user.Id,
        //...other properties
    }

    var mapperMock = new Mock<IMapper>();
    mapperMock.Setup(_ => _.Map<Utente>(It.IsAny<object>())).Returns(expected);

    var subject = new MyBusinessClass(userDataManagerMock.Object, mapperMock.Object);

    //Act
    var actual = subject.GetUser(userId);

    //Assert
    Assert.Equal(expected, actual);
}

在上面的代码中,用户数据管理器和映射器在测试 GetUser 方法时模拟并注入到主题中。

这是对上述方法的独立单元测试,表明如果依赖项在调用期间按预期执行,则该方法的当前实现将流向完成。