我们有一个代码库,使用automapper技术,分为两层,Domain
和Service
。每个层都有自己的对象来表示数据,DomainItem
和ServiceItem
。服务层从域层获取数据,然后使用构造函数注入的automapper实例进行映射。
class Service
{
public ServiceItem Get(int id)
{
var domainItem = this.domain.Get(id);
return this.mapper.Map<DomainItem, ServiceItem>(domainItem);
}
}
假设最佳实践,使映射器没有副作用和外部依赖。您可以编写一个静态函数,在几秒钟内将一个对象转换为另一个对象,只需映射字段即可。
考虑到这一点,像这样在单元测试中模拟映射器是一种好的做法吗?
[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);
}
}
对我来说,这种单元测试似乎并没有带来任何价值,因为它实际上只测试了mock对象。所以我要么不写它,要么使用真正的映射器而不是mock的那个。我是正确的还是有什么我忽略了的东西?