2015-09-29 4 views
0

У меня есть единичный тест - где я делаю AutoMapperConfiguration в настройке. Затем я устанавливаю IMappingEngine как частное свойство в конструкторе в моем классе, где я действительно делаю сопоставление. Ед. Тест терпит неудачу, если я использую это свойство, но использование статического метода от automapper отлично работает. Оба метода отлично работают при запуске реальной программы. Единственное различие, которое я вижу, - это единичные тесты в отдельной сборке. Соответствие CLS включено.Назначение IMappingEngine в конструкторе вызывает исключение отображения при сопоставлении только при запуске из модульного теста

public class AutomapperConfiguration 
{ 
    public static void Configure() 
    { 
     Mapper.Initialize(cfg => 
     { 
      cfg.AddProfile<AclassMappingProfile>(); 
     }); 
    } 
    public static void Reset() 
    { 
     Mapper.Reset(); 
    } 
} 
public class AssetModelFactoryTests 
{ 
    [SetUp] 
    public void SetUp() 
    { 
     AutomapperConfiguration.Configure(); 
    } 
    [Test] 
    public void TestA() 
    { 
     var a = new A(); 
    } 
} 

public class A 
{ 
    private IMappingEngine _mappingEngine; 
    public A() 
    { 
     _mappingEngine = Mapper.Engine; 
    } 

    public void DoA() 
    { 
     Mapper.Map<Destination>(source); //works 
     _mappingEngine.Map<Destionation>(source); //Throws mapping not supported 
    } 
} 
+0

Какое исключение вы получаете от своих тестов, когда они терпят неудачу? –

ответ

1

Не используйте статические методы Mapper.*, если вы планируете протестировать методы. Используйте IMappingEngine всюду, настройте его при запуске приложения и введите через соответствующий механизм инверсии зависимостей.

+0

У меня есть пакет nuget для Unity DI, чтобы автоматизировать это и планировать запись для Autofac. –

+0

Я знаю, что я использую IMappingEngine и статический Mapper.Engine, потому что это (как всегда) часть более старой и более старой системы. Я хотел сделать это таким образом, чтобы было легче добавить IMappingEngine через DI позже, когда мы реорганизовали больше кода. – ruffen