Консольное приложение DotNet Core: AutoMapper - PullRequest
0 голосов
/ 20 февраля 2019

Здравствуйте! Я использую AutoMapper в консольном приложении DotNet Core

Файл запуска:

public class StartUp
{
    public  void ConfigureServices(IServiceCollection services) {  
    services.AddAutoMapper();  
}  
}

Файл отображения:

public class MappingProfile: Profile {  
    public MappingProfile() {  
         CreateMap < Employee, EmployeeModel > ().ForMember(dest => dest.Address, opts => opts.MapFrom(src => new Address {  
            City = src.City, State = src.State   }));  
    }  
}  

Класс UnitTest:

 public class UnitTest1
    {
         private readonly IMapper _mapper;  
        public UnitTest1(IMapper mapper)
        {
             _mapper = mapper;  
        }

        [Fact]
        public void Test1()
        {  

            Employee  emp = new Employee ();  
            emp.Id=1;
            emp.Name="Test";
           var empmodel = _mapper.Map < Employee, EmployeeModel > (emp);  
           Assert.Equal(empmodel.Name,"Test");
            Assert.Equal(empmodel.Id,1);

        }
    }

Ссылка на ссылку: https://www.c -sharpcorner.com / article / как реализовать автоматическое применение в asp-net-core-mvc-application /

Я получаю приведенную ниже ошибку при запуске тестового файла: Сообщение об ошибке:

Следующие параметры конструктора не имеют совпадающих данных фикстуры: IMapper mapper

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Поскольку ваши модульные тесты запускаются не так, как обычно, ваше внедрение зависимостей не настроено или не используется.Поэтому, когда ваши модульные тесты запускаются, вы получаете исключение нулевой ссылки, потому что никто не передает в Imapper.

Если вы хотите использовать конструктор, я - ваши модульные тесты, вы захотите выполнить

* 1004.*

Тогда у вас будет экземпляр объекта, который вы пытаетесь проверить.В модульных тестах я стараюсь избегать вызова абстракции класса, который пытаюсь протестировать, потому что я тестирую фактическую работу этого класса за интерфейсом

0 голосов
/ 20 февраля 2019

Мне не совсем понятно, что именно вы пытаетесь сделать, но если вы используете автопилот в тестовом проекте, то это может быть полезно:

[Fact]
    public void Test1()
    {

        var employee = new Employee
        {
            AddressEmployee = new Address
            {
                City = "SomeCity"
            }
        };

        //initialize automapper and register mapping profile
        var mockMapper = new MapperConfiguration(cfg => cfg.AddProfile(new EmployeeProfile()));

        //create new mapper
        var mapper = mockMapper.CreateMapper();

        //map
        var employeeModel = mapper.Map<EmployeeModel>(employee);

        // do assert or another stuff
    }

Кстати, если именаполя в классах одинаковы, вам не нужно указывать, откуда и на какую карту.Достаточно указать классы.

CreateMap<Employee, EmployeeModel>();
...