动态测试通过AutoMapper

时间:2016-01-22 18:23:33

标签: c# unit-testing nunit automapper

我想从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场。

我可以手工完成这一切,但我觉得可能有一些更智能的解决方案。

1 个答案:

答案 0 :(得分:0)

来自AutoMapper维基上的Configuration Validation ...

  

手工绘制的映射代码虽然乏味,却具有存在的优势   测试。 AutoMapper背后的灵感之一就是消除   不只是自定义映射代码,而且不需要手动   测试。因为从源到目的地的映射是   基于约定,您仍然需要测试您的配置。

     

AutoMapper以。的形式提供配置测试   AssertConfigurationIsValid方法。

您应该可以使用AssertConfigurationIsValid

E.g。对于ProductModelProductDTO对象,您可以:

[Test]
public void ProductDTO_ToModel_Mapping_IsValid()
{
    //Arrange
    Mapper.CreateMap<productModel, ProductDTO>();

    //Act

    //Assert
    Mapper.AssertConfigurationIsValid();
}

这将验证两个对象之间的所有内容是否正确映射。这样您就不必使用TestCaseSource,因为AutoMapper会检查类型是否映射,而无需您通过测试用例提供值。