9

HttpContextのコンテンツを処理するラッパークラスを作成しようとしています。Cookieを作成していますが、HttpContext.RequestまたはResponseCookieコレクションに追加できません。

私はMoqを使用しています。また、次のリンクからMvcMockHelpを使用しています:http: //www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

次のコードでCookiesコレクションに追加しようとすると:

        HttpContextBase c1 = MvcMockHelpers.FakeHttpContext();
        HttpCookie aCookie = new HttpCookie("userInfo");
        aCookie.Values["userName"] = "Tom";
        c1.Request.Cookies.Add(aCookie);    <------ Error here

コードc1.Request.Cookies.Add(aCookie);の4行目に次のエラーが表示されます。

Object reference not set to an instance of an object.

私も次のようにコンテキストオブジェクトをインスタンス化しようとしましたが、それでも運がありません

HttpContextBase c = MvcMockHelpers.FakeHttpContext
             ("~/script/directory/NAMES.ASP?city=irvine&state=ca&country=usa");

Request内のCookieコレクションがNULLであることがわかります。どうすればインスタンス化できますか?

私も次のことを試しましたが、運がありません。

c1.Request.Cookies["userName"].Value = "Tom";

私が間違っていることを教えてください。

4

1 に答える 1

8

Hanslemanのコードを見ると、Requestプロパティはとして作成されてMockいますが、そのモックのプロパティは設定されていないため、Cookiesnullであり、読み取り専用プロパティであるため設定できません。

2つのオプションがあります。

  1. Cookiesメソッドでプロパティのモックを設定するFakeHttpContext() 、または
  2. ライブラリを直接参照している場合など、これを実行したくない場合は、アクセスできるモックHttpRequestBaseを次のように再構成するだけです。HttpContextBase

    [Test]
    public void SetCookie()
    {
      var c1 = MvcMockHelpers.FakeHttpContext();
      var aCookie = new HttpCookie("userInfo");
      aCookie.Values["userName"] = "Tom";
    
      var mockedRequest = Mock.Get(c1.Request);
      mockedRequest.SetupGet(r => r.Cookies).Returns(new HttpCookieCollection());
      c1.Request.Cookies.Add(aCookie);
    
      Debug.WriteLine(c1.Request.Cookies["userInfo"].Value);
    }
    

    Mock.Get(object)モックが返されたら、Cookieを設定して使用できます。

一般に、静的メソッドを使用して、をObject再作成できます。MockGet(MockedThing.Object)

于 2012-04-07T14:16:43.913 に答える