2017-06-07 12 views
1

タイトルによれば、私は統合テストを作成しており、これらのテストの一部としてIMapperオブジェクトをテストして初期化したいと考えています。統合テストでのIMapperの使用

私はテストフレームワークとしてXUnitを使用しています。依存性注入を処理するにはNinjectを使用しています。

私は静的なAutoMapperメソッドを使用することに慣れていて、私のリポジトリコンストラクタの1つのパラメータであるIMapperインターフェイスを使用するようにシフトしています。

NinjectModule基本クラスを継承するDependencyRegistrarクラスがあります。

マイLoadメソッドは以下の通りです:

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

これは、マッパーを読み込むのに最適です。ありがとう! –

関連する問題