1

私は静的クラスにこの静的メソッドを持っています:

public static class CookieHelper //:ICookieHelper
{
    public static void CreateCookie(string cookieName, int expireyDays)
    {
        HttpCookie cookie;
        cookie = HttpContext.Current.Response.Cookies[cookieName]; //Exception is here
        cookie.Expires.AddDays(expireyDays);
    }
}

この単体テストを作成しました。このテストを実行すると、nullreferenceexception が生成されます (オブジェクト参照が ... に設定されていません)。

[Test]
public void ShouldCreateCookieAndValidateNotNull()
{
    string newCookie = "testCookie";

    CookieHelper.CreateCookie(newCookie,5);

    string cookieValue = HttpContext.Current.Server.HtmlEncode(HttpContext.Current.Request[newCookie]);

    Assert.NotNull(cookieValue);
}

これは、常に Web フォームのコード ビハインドで呼び出されます。プレゼンター層にはありません。

私は何を間違っていますか?

4

2 に答える 2

1

実装を HttpContext.Current と密結合していますが、これは良い考えではありません。

Cookie の作成に使用するHttpContextBaseを受け入れるようにヘルパーを再作成することをお勧めします。または、コンテキストをまったく必要としないため、HttpResponseBaseでさえ。

次に、コントローラーから現在のコントローラー コンテキスト (または応答) を使用してヘルパーに渡すことができます。

于 2013-09-24T17:00:52.407 に答える