AutoMapper+xUnit:缺少类型映射配置或不支持的映射

Fre*_*III 5 asp.net-mvc xunit n-tier-architecture automapper

我无法弄清楚这一点。我有一个 N 层 ASP.MVC 应用程序,我正在编写我的第一个单元测试,但它似乎在我的 AutoMapper 配置上失败了。我已经使用 AutoMapper 一百万次并且使用它从来没有遇到任何问题。

我确定我错过了一些简单的东西,但我已经盯着这个看了 24 小时了。

类库:APP.DOMAIN

public class User : IEntity<int>
{
    public int Id { get; set; }

    [StringLength(20), Required]
    public string UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

类库:APP.SERVICE

引用 App.Domain

public class UserViewModel
{
    public int Id { get; set; }
    public string UserName { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

我在服务层有我的 AutoMapper 引导程序。

public static class AutoMapperBootstrapper
{
    public static void RegisterMappings()
    {
        Mapper.CreateMap<User, UserViewModel>();
    }
}
Run Code Online (Sandbox Code Playgroud)

用户服务.cs

 public class UserService : IUserService
 {
    private readonly IUserRepository _userRepository;

    public UserService(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

    public List<UserViewModel> GetUsers()
    {
        var users = _userRepository.GetAll();

        if (users == null)
        {
            throw new Exception("No users found.");
        }

        return Mapper.Map<List<UserViewModel>>(users); // FAILS ON AUTOMAPPER
    }
  }
Run Code Online (Sandbox Code Playgroud)

ASP.MVC层:APP.WEB

参考 App.Service

private void Application_Start(object sender, EventArgs e)
{
    // Register AutoMapper
    AutoMapperBootstrapper.RegisterMappings();
    Mapper.AssertConfigurationIsValid();

    // Code that runs on application startup
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)

单元测试层:

public class TestUserRepository :IUserRepository
{
    public IEnumerable<User> GetAll()
    {
        var users = new List<User>()
        {
            new User { Id = 1, UserName = "Mary"},
            new User { Id = 2, UserName = "Joe"}
        };
        return users;
    }
  }


public class UserServiceTest
{
    private IUserService _userService;
    private readonly IUserRepository _userRepository;

    public UserServiceTest()
    {
        _userRepository = new TestUserRepository();
    }

    [Fact]
    public void GetUsers_Should_Return_Correct_Number_Of_Users()
    {
        // Arrange
        _userService = new UserService(_userRepository);

        // Act
        var result = _userService.GetUsers(); // FAILS ON AUTOMAPPER

        // Assert
        Assert.True(result.Any(u => u.UserName == "Mary")); 
    }
}
Run Code Online (Sandbox Code Playgroud)

失败的测试消息:

*** Failures ***

Exception
AutoMapper.AutoMapperMappingException: AutoMapper.AutoMapperMappingException : Missing type map configuration or unsupported mapping.

Mapping types:
User -> UserViewModel
App.Data.Model.User -> App.Service.ViewModels.UserViewModel

Destination path:
List`1[0]

Source value:
App.Data.Model.User
   at App.Service.Services.UserService.GetUsers() in D:\Repositories\App\App.Service\Services\UserService.cs:line 36
   at App.Tests.Service.Tests.UserServiceTest.GetUsers_Should_Return_Correct_Number_Of_Users() in D:\Repositories\App\App.Tests\Service.Tests\UserServiceTest.cs:line 34
Run Code Online (Sandbox Code Playgroud)

mos*_*ash 0

我不确定问题是什么,自从我上次使用 AutoMapper 以来已经有一段时间了,但我很确定以下方法可以工作:

return users.Select(Mapper.Map<UserViewModel>);
Run Code Online (Sandbox Code Playgroud)