NUnit:Automapper <idatareader,dto =“”>。ConvertUsing()返回带有null属性的Dto </idatareader,>

时间:2014-07-07 12:34:12

标签: c# nunit automapper mstest idatareader

我使用AutoMapper从IDataReader映射到简单的DTO。

我在使用ForMember时能够映射属性,但在使用ConstructUsing / ConvertUsing时则不能。在这种情况下,我的所有NUnit测试都失败,因为AutoMapper返回一个带有null属性的DTO。 有趣的是,在MSTest中不会发生这种行为:在MSTest下运行测试时,映射有效。

以下是代码:

public class Dto
{
public string Name { get; set; }
public string Value { get; set; }
}

这传入NUnit和MSTest:

Mapper.CreateMap<IDataReader, Dto>()
.ForMember(x => x.Name, map => map.MapFrom(reader => reader["Name"]))
.ForMember(x => x.Value, map => map.MapFrom(reader => reader["Value"]));

这只在MSTest中传递,并在NUnit中返回带有null属性的Dto:

Mapper.CreateMap<IDataReader, Dto>()
.ConvertUsing(Map); // ConstructUsing doesn't work either

private Dto Map(IDataReader reader)
{
    return new Dto
    {
         Name = (string)reader["Name"],
         Value = (string)reader["Value"]
    };
}

在NUnit中甚至没有调用MyTestMethod。

这是AutoMapper中的错误吗?在NUnit?既?

我不应该使用AutoMapper进行IDataReader映射吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

在我偶然发现这个问题之后, https://groups.google.com/forum/#!topic/automapper-users/3DcPbP-GgNg

我发现这与NUnit / MsTest无关,只是由于AutoMapper.Net4.DLL在我的项目中而引起的。

此DLL包含DataReaderMapper,它覆盖了我的自定义IDataReader映射。 由于我的实际项目列与对象的属性名称不匹配,因此DataReaderMapper只返回null。

(至于NUnit / MsTest,我有不同的项目,并且没有怀疑其中一个的额外DLL。在缩小问题后我能够在两个框架上重现它。)

从我的项目中删除AutoMapper.Net4.DLL解决了这个问题。

对于误导性问题抱歉:)