比较AutoMapper中的对象时,.NET 5类库xUnit测试失败



我目前正在开发一个没有Startup方法的.NET 5类库项目。

我试图实现的想法是,开发人员可以利用这个库并传递一个对象。这个对象将通过方法运行,AutoMapper将获取与FirstDTO中的属性对齐的属性,然后返回一个可以在任何其他项目中使用的DTO。

我对AutoMapper比较陌生,在这里找到了这篇文章:如何在类库项目中配置AutoMapper?

我喜欢这种方法,并利用它将动态对象映射到DTO:

配置.cs

public static class Configuration
{
private static readonly Lazy<IMapper> Lazy = new Lazy<IMapper>(() =>
{
var config = new MapperConfiguration(cfg =>
{
cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;
cfg.AddProfile<MappingProfile>();
});
IMapper mapper = config.CreateMapper();
return mapper;
});
public static IMapper Mapper => Lazy.Value;
}

几乎逐字逐句的方法。

我有MappingProfile.cs类:

public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<dynamic, FirstDTO>();
CreateMap<dynamic, SecondDTO>();
}
}

当我调用基类时,我有以下方法:

public class BaseLibraryClass : IBaseLibraryClass
{
public FirstDTO GetFirstObject(dynamic objectSentIn)
{
return Configuration.Mapper.Map<FirstDTO>(objectSentIn);
}
}

不过,在我看来,这应该行得通。

现在,当我编写xUnit单元测试时,在比较FirstDTO和构建的DTO:时,我遇到了一个失败的Assert.Equal

private readonly IBaseLibraryClass baseLibraryClass = new BaseLibraryClass();
private readonly FirstDTOBuilder firstDTOBuilder = new FirstDTOBuilder();
[Fact]
public void TestSeparateObject()
{
// Arrange
FirstDTO firstDTO = firstDTOBuilder.DefaultDTO().Build();
// Act
FirstDTO result = baseLibraryClass.GetFirstObject(firstDTO);
// Assert
Assert.Equal(firstDTO, result);
}

当我调试这个单元测试时,最终发生的事情是,通过Builder使用指定的属性构建DTO。它使用填充的属性成功地将DTO传递到GetFirstObject中,但当它返回时,它返回一个属性全部为零的FirstDTO对象类型,最终使我的单元测试失败。

我觉得这是一件显而易见的事情,但我一辈子都无法弄清楚是什么原因导致这些房产没有正确映射。

如有任何协助,我们将不胜感激!

Automapper支持开箱即用的动态映射,无需配置任何内容,因此在您的情况下,从配置中删除配置文件(或从配置文件中删除CreateMap(应该只起作用:

public static class Configuration
{
private static readonly Lazy<IMapper> Lazy = new Lazy<IMapper>(() =>
{
var config = new MapperConfiguration(cfg =>
{
cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;
});
IMapper mapper = config.CreateMapper();
return mapper;
});
public static IMapper Mapper => Lazy.Value;
}

最新更新