我想从A类映射到B类。但是,A类与B类有一些属性名称不匹配,并且有很多可以为空的类型。在null的情况下,我应该为该字段提供一个默认值(一些int?s应该是0,一些应该是1,等等)。好像我没有将大约15个ForMember调用的菊花链粘在我的Mapper.CreateMap()上。 (如果有更好的方法,请告诉我。)
现在我想知道世界上我如何能够简洁地测试这一点。我想我可以利用NUnit的TestCaseSource功能,所以创建一堆As,基本上为每个字段创建2个测试,例如。
// given int? A.foo == null
Assert.True(B.fooVal == DEFAULT_FOO_VALUE)
// another test...
// given int? A.foo == 500
Assert.True(B.fooVal == 500)
我只是不确定如何动态地(或者甚至可能)这样做。因此测试用例有四个输入,A的测试场,A测试场的值,测试的B场,测试值的B场。
我可以手工完成这一切,但我觉得可能有一些更智能的解决方案。
答案 0 :(得分:0)
来自AutoMapper维基上的Configuration Validation ...
手工绘制的映射代码虽然乏味,却具有存在的优势 测试。 AutoMapper背后的灵感之一就是消除 不只是自定义映射代码,而且不需要手动 测试。因为从源到目的地的映射是 基于约定,您仍然需要测试您的配置。
AutoMapper以。的形式提供配置测试 AssertConfigurationIsValid方法。
您应该可以使用AssertConfigurationIsValid
。
E.g。对于ProductModel
和ProductDTO
对象,您可以:
[Test]
public void ProductDTO_ToModel_Mapping_IsValid()
{
//Arrange
Mapper.CreateMap<productModel, ProductDTO>();
//Act
//Assert
Mapper.AssertConfigurationIsValid();
}
这将验证两个对象之间的所有内容是否正确映射。这样您就不必使用TestCaseSource
,因为AutoMapper会检查类型是否映射,而无需您通过测试用例提供值。