【问题标题】:Testing Using NUnit and Moq: use case使用 NUnit 和 Moq 进行测试:用例
【发布时间】:2018-08-23 14:15:18
【问题描述】:

我有一个管理USER 实体的业务类。

在这个类中,我有一个方法可以通过 id 返回单个用户:

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

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

_userDataManager是一个接口,IUSERDATAMANAGER,它已经实现了一个DAL类; GetUserById 返回用户或null(使用 EF6 进行搜索)。

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

我有两个问题:

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

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

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

【问题讨论】:

    标签: unit-testing entity-framework-6 nunit integration-testing moq


    【解决方案1】:

    测试这个方法有意义吗?

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

    我应该同时模拟这两个对象吗?

    当测试一个被测对象时,你模拟了可以让测试完成的依赖关系。

    例如

    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 方法时被模拟并注入到主题中。

    这是对上述方法的独立单元测试,并显示该方法的当前实现将完成,前提是依赖项在调用期间按预期执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多