【问题标题】:NUnit: Automapper<IDataReader, Dto>.ConvertUsing() returns Dto with null propertiesNUnit:Automapper<IDataReader, Dto>.ConvertUsing() 返回具有空属性的 Dto
【发布时间】:2014-07-07 12:34:11
【问题描述】:

我正在使用 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"]
    };
}

在 NUnit 中甚至没有调用 MyTestMethod。

这是 AutoMapper 中的错误吗?在 NUnit 中?两者都有?

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

提前致谢。

【问题讨论】:

  • 什么是MyTestMethod?你能发布完整的单元测试吗?

标签: c# nunit automapper mstest idatareader


【解决方案1】:

在无意中发现了这个问题后, 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 解决了这个问题。

对不起,误导性问题:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 2013-12-12
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2023-02-13
    • 2016-02-12
    • 1970-01-01
    相关资源
    最近更新 更多