Отсутствует конфигурация карты типов или неподдерживаемое отображение в IdentityRole - PullRequest
3 голосов
/ 17 января 2020

Я пишу unit tests, и это mapper снова вызывает у меня горе. Я понял из предыдущего поста, что я не могу Mock mapper, я должен использовать его прямо сейчас. Итак, я создал maps, но там говорится, что отсутствует тип map configuration.

    public RoleDto GetSingle([FromRoute] string id)
    {
        var r = roleManagerWrapper.GetSingleRole(id);
        return mapper.Map<RoleDto>(r);
    }

. Он ломается, когда пытается map объект. Существуют ли какие-либо специальные mapping для Task <IdentityRole>, которые необходимо реализовать?

    public async Task<IdentityRole> GetSingleRole(string roleId)
    {
        var role = await this.roleManager.Roles.SingleOrDefaultAsync(r => r.Id == roleId);

        return role;
    }

Вот мой тест, который подсчитывает только количество созданных ролей.

    [Test]
    public async Task Get_Single()
    {
        TestSetup();

        var roleManagerWrapperMock = new Mock<IRoleManagerWrapper>();


        var adminRole = new IdentityRole()
        {
            Name = "Admin",
            Id = "4a8de423-5663-4831-ac07-7ce92465b008"
        };

        var managerRole = new IdentityRole()
        {
            Name = "Manager",
            Id = "40f74162-3359-4253-9b5a-ad795b328267"
        };
        ApplicationDbContext.Roles.Add(managerRole);
        ApplicationDbContext.Roles.Add(adminRole);

        ApplicationDbContext.SaveChanges();

        var sut = new RolesController(roleManagerWrapperMock.Object, ApplicationDbContext, Mapper);
        var result = sut.GetSingle("4a8de423-5663-4831-ac07-7ce92465b008");
        Assert.AreEqual(result.UserCount, 1);
    }


       protected void TestSetup(string databaseName = null)
       {
        if (databaseName == null)
        {
            databaseName = GetTestName();
        }

        TestCleanup();
        ServiceProvider = new ServiceCollection()
            .AddEntityFrameworkInMemoryDatabase()
            .BuildServiceProvider();

        dbContextOptions = new DbContextOptionsBuilder<ApplicationDbContext>()
            .UseInMemoryDatabase(databaseName)
            .UseInternalServiceProvider(ServiceProvider)
            .Options;

        ApplicationDbContext = new ApplicationDbContext(dbContextOptions);

        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<RoleDto, IdentityRole>();
            cfg.CreateMap<IdentityRole, RoleDto>();
            cfg.CreateMap<CreateRoleDto, IdentityRole>().ReverseMap();
            cfg.CreateMap<UpdateRoleDto, IdentityRole>().ReverseMap();
        });
         Mapper = config.CreateMapper();
    }

1 Ответ

2 голосов
/ 17 января 2020

Требуется рефакторинг действия для использования правильного асинхронного синтаксиса, поскольку GetSingleRole возвращает Task<IdentityRole>

public Task<RoleDto> GetSingle([FromRoute] string id) {
    IdentityRole r = await roleManagerWrapper.GetSingleRole(id);
    return mapper.Map<RoleDto>(r);
}

И тест обновляется соответственно

[Test]
public async Task Get_Single() {
    //Arrange
    TestSetup();

    var roleManagerWrapperMock = new Mock<IRoleManagerWrapper>();

    //...omitted for brevity

    var sut = new RolesController(roleManagerWrapperMock.Object, ApplicationDbContext, Mapper);

    //Act
    RoleDto result = await sut.GetSingle("4a8de423-5663-4831-ac07-7ce92465b008");

    //Assert
    Assert.AreEqual(result.UserCount, 1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...