1

ActionResult部分ビューを返すをテストしようとしています。このアクションは、ユーザーが IE7 または IE8 を使用しているかどうかを確認し、ユーザーが IE7 または 8 を使用している場合は別のパーシャルを返します。別の方法で扱います。

に集中したいので、モデルの作成は省きましたRequest.Browser.Type

public ActionResult ActionName(string listing)
{
    if (model.Count > 1 && Request.Browser.Type != "IE8" && Request.Browser.Type != "IE7")
    {
        return PartialView("~/Areas/Features/Views/Video/MultiVideo.cshtml", model);
    }
    return PartialView("~/Areas/Features/Views/Video/SingleVideo.cshtml", model.FirstOrDefault());
}

最終的に2つのことを知りたい

  1. どうすればifをモックできますRequest.Browser.Typeか?
  2. コントローラー内でこれを行うのは良い習慣ですか? そうでない場合、どのソリューションがより良いでしょうか?

私が試したこと:

var browser = new Mock<HttpContext>(MockBehavior.Strict); browser.Setup(x => x.Request.Browser).Returns("IE9");

4

1 に答える 1

4

質問を書いているときに自分の質問に答えました(私にとってはよくあることです)。ただし、これについては他の場所ではあまり見つけることができなかったので、解決策を共有することにしました。

this SO questionの助けを借りて、ブラウザーの種類をモックできるようにするためにこれを思いつきました

        var request = new Mock<HttpRequestBase>(MockBehavior.Strict);

        // This line would do the job
        request.Setup(b => b.Browser.Type).Returns("IE9");

        var context = new Mock<HttpContextBase>();
        context.SetupGet(c => c.Request).Returns(request.Object);

        controller.ControllerContext = new ControllerContext(
                                            context.Object,
                                            new RouteData(),
                                            controller);

これが良い考えなのか、あなたのコントローラーでやるべきでないのか、私はまだ確信が持てません。任意の考えをいただければ幸いです。

于 2012-06-11T19:14:05.420 に答える