MVCアプリケーションで以下のコントローラコードを単体テストしようとしています。AutoMapperを使用するユニットテストコントローラ
[AllowAnonymous]
public ActionResult Index(string sort)
{
IEnumerable<Artist> artists;
if (Request.IsAuthenticated)
{
artists = _artistService.GetArtistsForUser(User.Identity.GetUserId());
if (!string.IsNullOrEmpty(sort) && sort != "asc")
{
ViewBag.Sort = "desc";
artists = artists.OrderByDescending(a => a.FName);
}
}
else
{
artists = _artistService.GetArtists(false);
if (!string.IsNullOrEmpty(sort) && sort != "asc")
{
ViewBag.Sort = "desc";
artists = artists.OrderByDescending(a => a.FName);
}
}
var vm = new ArtistIndexVM { Artists = Mapper.Map<IEnumerable<Artist>, IEnumerable<ArtistVM>>(artists) };
return View(vm);
}
最後のreturn文の直前に、私はAutoMapperマッピングがあります。私はユニットテストを実行しようとすると、これはエラーを投げています。 AutoMapper.AutoMapperMappingException:欠落型マップ設定またはサポートされていないマッピングエラーが
試験方法Project.Controllers.ArtistControllerTests.Index_Get_ReturnsAViewResultは例外をスローします。
これを解決するには、テストプロジェクトで再度マッピングを再定義する必要はありません。ご存じのように、自分のことを繰り返さない(DRY)の原則に沿って。
マッピングの設定は、実行前にユニットテストコードで呼び出すことができるように、外部呼び出し元からアクセス可能にする必要があります。 – Nkosi
それで、マッピングを自分のプロジェクトの中に置くのが最善だと言いますか?この方法で、マッピング設定が必要なときにはいつでもそのプロジェクトを参照できます。私がそれをしたら、私はテストをパスするために何か他のことをする必要がありますか? – Ciwan
いいえ、彼ら自身のプロジェクトは必要ありません。 MVC5を使用していると仮定すると、そこに直接構成を処理するStartupクラスがあることが前提となります。単体テスト時にこの起動は呼び出されていません。おそらく、起動時にすべてを設定する必要はありません。だから私は、AutoMapperの設定を単体テストから呼び出せるものに分離することを提案していました。 – Nkosi