1

これは ASP.NET MVC v1 です (v2 はまだ使用していません)。

次のようなルートエントリがあります。

            routes.MapRoute(
            "Srp",
            "soeg-{searchQuery}/{listingType}",
            new { controller = "Srp", action = "Search", listingType = string.Empty },
            new { listingType = "privat|forhandler|"}
            );

およびそれに一致するアクション:

        public ActionResult Search(QueryParameters queryParameters)

これは完全に機能します。mvc フレームワークは、searchQuery と ListingType を同じ名前の QueryParameters オブジェクトの 2 つのプロパティにマップすることを認識しています。

私の問題は単体テストです。私は Mvccontrib プロジェクトを使用しており、ShouldMapTo メソッドを愛しています:

        [Test]
    public void RegisterSrpRoutes_SoegWithKeywordAndValidListingType_ShouldMapCorrectly()
    {
        var queryParameters = new QueryParameters {SearchQuery = "hest", ListingType = "privat"};
        "~/soeg-hest/privat".ShouldMapTo<SrpController>(controller => controller.Search(queryParameters));
    }

それはうまくいきません!私は自分のアクションに次のような特定のパラメータを持っていました:

        public ActionResult Search(string searchQuery, string listingType)

これは機能しました (明らかに、単体テストは、この 1 つのオブジェクトではなく、2 つのパラメーター (文字列) を使用して Search にマップしようとします。

すべてのプロパティをパラメーターとして書き込むことに戻る以外に、問題を解決する方法を知っている人はいますか? プロパティのmvc自動マッピングはうまく機能しますが、mvccontribs testhelperをそれで動作させる方法があることを願っています。

4

1 に答える 1

1

このコードを見てからしばらく経ちましたが、送信したパラメーターに対して .Equals 呼び出しを行っていると思います。プリミティブ型の場合、これは簡単ですが、パラメーター オブジェクトの場合は、Equals オーバーライドを実装して、各プロパティの等価性をテストしてみてください。

于 2010-02-01T17:23:47.403 に答える