NUnit: Automapper<IDataReader, Dto>.ConvertUsing() 返回具有空属性的 Dto



我正在使用AutoMapper从IDataReader映射到一个简单的DTO。

当我使用ForMember时,我能够映射属性,但当我使用ConstructUsing/ConvertUsing时却不能。在这种情况下,我所有的NUnit测试都失败了,因为AutoMapper返回一个带有空属性的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"]
    };
}

MyTestMethod在NUnit中甚至没有被调用。

这是AutoMapper的一个bug吗?在NUnit吗?都有?

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

在我偶然发现这个问题之后,https://groups.google.com/forum/!主题/automapper-users/3 dcpbp-ggng

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

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

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

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

抱歉,这个问题误导了你:)

相关内容

  • 没有找到相关文章

最新更新