2016-08-17 14 views
5

は、私はユニットテストを開発していますメソッドのコードで適切な設定と初期化を呼び出します。続いてテストメソッド 'X'が例外をスローしました:System.InvalidOperationException:マッパーが初期化されていません。ここで

public ActionResult ItemsListing() 
{ 
    var itemsList = itemsRepository.GetItems(true); 

    if (itemsList.Count() > 0) 
    { 
     var itemsListVMs = Mapper.Map<IEnumerable<Item>, IEnumerable<itemsListingViewModel>>(itemsList); 
     return View(itemsListVMs); 
    } 
    else 
    { 
     return RedirectToAction("Home"); 
    } 

} 

は、マッピング構成ファイルからコードです:

public static class MappingConfig 
{ 
    public static void RegisterMaps() 
    { 
     Mapper.Initialize(config => 
     { 
      config.CreateMap<Item, itemsListingViewModel>(); 
     }); 
    } 
} 

そしてI以下のようにGlobal.asaxApplication_Start()イベントでマッパーを初期化しています

以下
MappingConfig.RegisterMaps(); 

がsであります私が実行しようとしているテストメソッドを実装する:

[TestMethod] 
public void ItemsListing() 
{ 
    HomeController controller = new HomeController(); 

    ViewResult result = controller.ItemsListing() as ViewResult; 

    Assert.IsNotNull(result); 
} 

私は単にアプリケーションを実行するとうまくいく。しかし、ユニットテストメソッドを実行しようとすると、前述のエラーメッセージが表示されます。誰も私がこの問題を乗り越えるのを助けることができますか?ありがとう!

+0

どのテストフレームワークを使用していますか、MSTestですか? – LukeW

+0

@ LukeW:はい、MSTestです。 – user1990

+1

@ user1990、ユニットテストで 'MappingConfig.RegisterMaps();'を呼び出していますか? – Nkosi

答えて

5

ユニットテスト用のマッピングを登録/登録し、Application_Start()が実行されていないことが必要です。これは、ユニットテスト中に実行されていないIISに関連付けられています。手動でマッピング設定を呼び出す必要があります。マッピング構成を

ClassInitializeAttribute Class は内テストのいずれかの前に使用しなければならないコードが含まれている方法を識別[ClassInitialize]属性で装飾方法で行われ、上記試験において

[TestClass] 
public class HomeControllerTests { 
    [ClassInitialize] 
    public static void Init(TestContext context) { 
     MappingConfig.RegisterMaps(); 
    } 

    [TestMethod] 
    public void ItemsListing() { 
     HomeController controller = new HomeController(); 

     ViewResult result = controller.ItemsListing() as ViewResult; 

     Assert.IsNotNull(result); 
    } 
} 

テストクラスが実行し、テストクラスが使用するリソースを に割り当てる。

+1

'[TestInitialize]'についてもう少し詳しく知りたいかもしれません。そのクラス内のすべてのテストの前にコードのチャンクが一度実行されることがわかっていることは重要です。 – LukeW

+0

@ Nkosi:ありがとう! Init()メソッドを静的として宣言し、TestContext型のパラメータを渡す必要がありました。今は完璧に動作しています! – user1990

関連する問題