MVC 4でWebサイトを構築し、Automapperを使用してドメインオブジェクトからViewmodelオブジェクトにマップしています。ここに記載されているように、Automapperを注入しましたhttp://rical.blogspot.in/2012/06/mocking-automapper-in-unit-testing.html
デバッグ中はアクションメソッド内で正常に機能していますが、ユニットテスト中にautomapperサービスを挿入すると、service.mapがnullを返していることがわかります。ただし、デバッグ中はマッピングは問題ありません。私は理由を見つけることができず、4時間以上試しています。Interviewというドメインクラスとそれに対応するViewmodelがInterviewModelとしてあります。マッピングをCreateMap();として初期化しました。automapper profile configで、グローバルスタートアップメソッドから呼び出されました。以下はコントローラーとアクションです...
public class NewsAndViewsController : Controller
{
private IInterviewRepository repository;
private IMappingService mappingService;
public NewsAndViewsController(IInterviewRepository productRepository, IMappingService autoMapperMappingService)
{
repository = productRepository;
mappingService = autoMapperMappingService;
}
[HttpPost, ValidateAntiForgeryToken]
[UserId]
public ActionResult Edit(InterviewModel interView, string userId)
{
if (ModelState.IsValid)
{
var interView1 = mappingService.Map<InterviewModel, Interview>(interView);
**// THE ABOVE LINE RETURNING NULL WHILE RUNNING THE BELOW TEST, BUT NOT DURING DEBUGGING**
repository.SaveInterview(interView1);
TempData["message"] = string.Format("{0} has been saved", interView.Interviewee);
return RedirectToAction("Create");
}
return View(interView);
}
}
[TestMethod]
public void AddInterview()
{
// Arrange
var interviewRepository = new Mock<IInterviewRepository>();
var mappingService = new Mock<IMappingService>();
var im = new InterviewModel { Interviewee="sanjay", Interviewer="sanjay", Content="abc" };
mappingService.Setup(m => m.Map<Interview, InterviewModel>(It.IsAny<Interview>())).Returns(im);
var controller = new NewsAndViewsController(interviewRepository.Object, mappingService.Object);
// Act
var result = controller.Edit(im, "2") as ViewResult;
// Assert - check the method result type
Assert.IsNotInstanceOfType(result, typeof(ViewResult));
}