Unit testing 在单元测试中模拟Mapper.Map()

Unit testing 在单元测试中模拟Mapper.Map(),unit-testing,mocking,moq,Unit Testing,Mocking,Moq,我的控制器中有以下代码行,需要为单元测试设置此代码行 var result = data.ToList().Select(x=> this.mapper.Map<A_Class, B_Class> (x)).ToList(); var result=data.ToList().Select(x=>this.mapper.Map(x)).ToList(); 我在做类似以下的事情 this.mapperMock.Setup(x => x.Map<A_Clas

我的控制器中有以下代码行,需要为单元测试设置此代码行

var result = data.ToList().Select(x=> this.mapper.Map<A_Class, B_Class>   (x)).ToList();
var result=data.ToList().Select(x=>this.mapper.Map(x)).ToList();
我在做类似以下的事情

  this.mapperMock.Setup(x => x.Map<A_Class, B_Class>(AAA)).Returns(expectedResult);
this.mapperMock.Setup(x=>x.Map(AAA)).Returns(expectedResult);

有人能建议什么应该是AAA,什么应该是预期结果吗?在我的控制器中,我的linq用于数据中一个_类的每个对象。如果您想返回假
expectedResult
而不管传递了
A_Class
的哪个值,如何在UnitTest中设置此选项:

mapperMock.Setup(x => x.Map<A_Class, B_Class>(It.IsAny<A_Class>))
          .Returns(expectedResult);

请注意,如果没有匹配的设置,Moq将返回一个默认值,对于引用类型,该值将为
null

var result=data.ToList()。选择(x=>this.mapper.Map(x)).ToList();返回一个B_类的列表。我的预期结果应该是B_类的列表或对象吗。select将迭代您的输入列表,并将调用
Map
为每个
a
投影一个
B_类
,然后在
ToList
中再次整理该类(您只是模拟了
AutoMapper.Map
,而不是整个Linq:-),非常感谢。你能给我推荐一些关于单元测试的好东西吗。我需要学习如何有效地测试所有层,例如存储库、服务、MVC控制器等。一些实践教程或材料如何断言数据。应等效到(expectedResult);这?如果您正在测试的方法预期会返回一个确切的实例,您可以通过引用进行检查,例如,
Assert.AreEqual(expectedResult,actualResult)
。如果没有,则需要检查两者的每个相关属性,或者在
expectedResult
类上实现
IComparable
,甚至序列化两者并比较输出。i、 e.没有神奇的方法来比较两个实体或一个图形的所有属性,AFAIK。Roy Osherove是C#and Unit testing领域的大师之一——谷歌应该给你一些好的参考资料/书籍。
mapperMock.Setup(
         x => x.Map<A_Class, B_Class>(It.Is<A_Class>(_ => a.Property == "foo")))
    .Returns(expectedResult);