1

こんにちは、リクエスト パラメータをモックする方法はありますか。テストを実行するために偽のリクエスト値を作成するテスト時の最善の方法は何ですか

このようなものは機能しますか?

        _context = MockRepository.GenerateStub<HttpContext>();
         request = MockRepository.GenerateStub<HttpRequest>();

        var collection = new NameValueCollection();
        collection.Add("", "");

        SetupResult.For(request.Params).Return(collection);
        SetupResult.For(_context.Request).Return(request);
4

4 に答える 4

1

前述のように、HttpRequest への直接的な依存関係が多すぎるのは望ましくありません。これは、この時代では設計がかなり悪いためです。その事実は、内部で rhino-mock フレンドリーな仮想メソッドを使用しているため、HttpRequestBase のモックを検討する必要があることに注意してください。

于 2010-07-07T14:43:02.473 に答える
0

HTTPRequest オブジェクトの新しいインスタンスを作成しようとしましたが、それをモックすることができました。テキスト ライターなどの入力は、httpcontextbase またはその他の方法でモックする必要があります。

于 2011-01-05T09:49:53.340 に答える
0

MVCContrib.TestHelper を調べてください。Rhino.Mocks を使用して、コントローラー (モック HttpContext、Request、Response、Session など) の完全なテスト環境を作成します。参照: Rhino.Mocks を使用して ControllerContext をモックする方法

于 2010-07-07T18:57:04.817 に答える
0

HttpRequest多数の非仮想プロパティとメソッドを備えています。あなたはそれを嘲笑することはできません。Page.Request からアクセスしている場合は、新しいインスタンスを作成してテスト用の値を設定することさえできません。これは、UI が自動化されたテストを受けることがほとんどない (あったとしても) 理由の 1 つです。多くの場合、それは不可能です。そのため、MVC や MVVM などの自動テストを可能にするパターンを使用します。テスト可能な別のクラスにできるだけ多くの処理ロジックをプッシュすることで、実行する必要がある手動テストの量を減らします。

あなたが利用できる最善の策は、モックできるクラスを作成し(つまり、仮想メソッドまたはインターフェースとしてスポーツとキャストを使用して)、そのクラスHttpRequest を介してのみアクセスすることです。

たとえば、ページ処理の一部として特定の Cookie 値を取得する場合は、CookieHandler次のようにクラスを作成できます。

public class CookieHandler
{
    private HttpRequest CurrentRequest;

    public CookieHandler(HttpRequest request)
    {
        CurrentRequest = request;
    }

    public virtual HttpCookie UserLanguagePreference
    {
        get
        {
             return CurrentRequest.Cookies["UserLanguagePreference"].Name;
        }
    }
}

これは理想的なクラスではなく、単なる例です。は仮想であるためUserLanguagePreference、Rhino でモックできます。シングルトン (テストで置き換え可能CookeHandler) を作成したり、UI ページでプロパティベースのインジェクションを使用したり、Unity のような DI フレームワークを使用したりすることができます。

重要なのは、自動化された単体テストですべてをテストすることはできないため、気にしないでください。できる限りテストを行い、残りは統合および手動のユーザー受け入れテストのために取っておきます。

于 2010-07-07T13:59:42.933 に答える