2017-06-07 82 views
1

正如標題所說,我正在編寫集成測試,並且希望測試並初始化IMapper對象作爲這些測試的一部分。在集成測試中使用IMapper

我使用XUnit作爲測試框架和Ninject來處理依賴注入。

我習慣於使用靜態AutoMapper方法,並且正在轉向使用IMapper接口,它是我的一個存儲庫構造函數中的一個參數。

我有一個繼承NinjectModule基類的DependencyRegistrar類。

我的負荷方法如下:

public override void Load() 
    { 
     var automapperConfig = new MapperConfiguration(cfg => { cfg.AddProfile<AutoMapperProfile>(); }); 
     automapperConfig.AssertConfigurationIsValid(); 
     var mapper = automapperConfig.CreateMapper(); 

     Bind<IMapper>().ToConstant(mapper).InSingletonScope(); 
     Bind<IUserManager>().To<UserManager>().InTransientScope(); 
     Bind<IUserRepository>().To<UserRepository>().InTransientScope(); 
    } 

該模塊通過在API項目的NinjectWebCommon類加載,但很明顯,在集成測試中沒有加載。

ConfigurationSettingsEntity configurationSettings = new ConfigurationSettingsEntity(ConfigurationManager.AppSettings); 
     var modules = new INinjectModule[] { new DependencyResolution.DependencyRegistrar(configurationSettings) }; 
     var kernel = new StandardKernel(modules); 

所以,我的問題是,什麼是下載真正的映射器實現,這樣我可以傳遞到映射我的倉庫的構造,當我打造出了集成測試的最佳方式?

UserRepository tester = new UserRepository(mapper); 

回答

1

從使用靜態映射器轉向使用絕對是值得的 - 測試將會更容易!

在我的單元測試,我使用像以下代碼:

var config = new MapperConfiguration(cfg => { 
    cfg.AddProfile<MyProfile>(); 
}); 
IMapper mapper = config.CreateMapper(); 

在每個測試套件,我手動指定所需的那些測試的配置文件。

+0

這對加載映射器非常有用。謝謝! –