2

コントローラーのテストにMoqパッケージを使用しています。HomeController.cs

public class HomeController : Controller
{  readonly IPermitRepository _repository;
    public HomeController(IPermitRepository rep)
    {            this._repository = rep;        }

    public ViewResult Index()
    {
        ViewBag.Message = "Hello World";
        PermitModel model = _repository.GetPermitDetails();
        return View(model);
    }
}

HomeControllerTest.csで

 [TestClass]
 Public class HomeControllerTest
{
    [TestMethod]
    public void Index()
    {       
        var messagingService = new Mock<IPermitRepository>();
        var controller = new HomeController(messagingService.Object);

        var result = controller.Index() as ViewResult;
       Assert.IsInstanceOfType(result.Model, typeof(PermitModel));
    }
}

しかし、その与えるエラー。 Assert.IsInstanceOfTypeが失敗しました。予想されるタイプ:。実際のタイプ:<(null)>。

誰かがMVC3のMoqパッケージに関する解決策といくつかの情報を提供できますか?前もって感謝します

4

1 に答える 1

2

Moq はnullデフォルトで、非 void メソッド呼び出しごとに戻ります。

したがって、コントローラー_repository.GetPermitDetails();で returnを呼び出すとnull、テストが失敗するのはそのためです。

Setup何かを返すには、メソッドを呼び出す必要があります。

var messagingService = new Mock<IPermitRepository>();
messagingService.Setup(m => m.GetPermitDetails()).Returns(new PermitModel());
var controller = new HomeController(messagingService.Object);

モックの動作をカスタマイズする方法の詳細については、Moq クイックスタートを参照してください。

于 2012-05-24T14:48:19.557 に答える