小编net*_*kin的帖子

在单元测试中模拟Automapper是一个好习惯吗?

有这个代码库,我们使用automapper并有2层,DomainService.每个都有它的数据表示对象,DomainItemServiceItem.服务从域获取数据,使用构造函数注入的automapper实例进行映射

class Service 
{
  public ServiceItem Get(int id)
  {
    var domainItem = this.domain.Get(id);
    return this.mapper.Map<DomainItem, ServiceItem>(domainItem);
  }
}
Run Code Online (Sandbox Code Playgroud)

假设最佳实践,因此mapper没有副作用,也没有外部依赖.您将编写一个静态函数,在几秒钟内将一个对象转换为另一个对象,只是映射字段.

考虑到这一点,在这样的单元测试中模拟映射器是一个好习惯吗?

[TestClass]
class UnitTests
{
  [TestMethod]
  public void Test()
  {
    var expected = new ServiceItem();

    var mockDomain = new Mock<IDomain>();
    // ... setup
    var mockMapper = new Mock<IMapper>();
    mockMapper.Setup(x => x.Map<DomainItem, ServiceItem>(It.IsAny<DomainItem>()))
      .Returns(expected);


    var service = new Service(mockDomain.Object, mockMapper.Object);
    var result = service.Get(0);

    Assert.AreEqual(expected, result);
  }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,似乎这样的单元测试并没有真正带来任何价值,因为它只是有效地测试了模拟,所以我要么根本不要写它或者我要使用实际的映射器,而不是模拟的映射器.我是对的还是我忽略了什么?

c# unit-testing mocking software-design automapper

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

automapper ×1

c# ×1

mocking ×1

software-design ×1

unit-testing ×1