1

UrlHelper の拡張メソッドが機能することを確認するために単体テストを作成しようとしていますか? 誰もこれを行う方法を知っていますか? MVC 1.0 と MvcContrib を使用しています。ルートはテストできますが、次のようなコードはテストできません。

    public static string MoreFloorplans(this UrlHelper urlHelper, long productID, int pageIndex)
    {
     return urlHelper.Action<CatalogController>(x => x.GetRelatedProducts(productID, pageIndex));

    }
4

2 に答える 2

4

私は Aaronaught と Scott H の指示に従いましたが、少し間抜けでした。私はこのようなものになりました。

public UrlHelper GetUrlHelper(
        string fileName = "/",
        string url="http://localhost", 
        string queryString="")
{
    // Use routes from actual app
    var routeCollection = new RouteCollection();
    MvcApplication.RegisterRoutes(routeCollection);

    //Make a request context
    var request = new HttpRequest(fileName, url, queryString);
    var response = new HttpResponse(new StringWriter());
    var httpContext = new HttpContext(request, response);
    var httpContextBase = new HttpContextWrapper(httpContext);
    var requestContext = new RequestContext(httpContextBase, new RouteData());

    // Make the UrlHelper with empty route data
    return new UrlHelper(requestContext, routeCollection);
}

public void MoreFloorplans_ReturnsExpectedUrl()
{
    var urlHelper = GetUrlHelper();
    var actualResult = urlHelper.MoreFloorPlans(1,2);
    Assert.AreEqual("/MoreFloorPlans/1/2", actualResult);
}

UrlHelper 自体ではなく、拡張メソッドをテストする必要があることに注意してください。そのため、RequestContext で RouteData を設定することはおそらく範囲外です。

于 2010-07-23T12:55:59.570 に答える
0

を作成するにはUrlHelper、が必要ですRequestContext。機能するを作成するには、とRequestContextが必要です。2番目の、は、簡単に作成できる必要があります。、あなたはモックする必要があります。HttpContextBaseRouteDataRouteDataHttpContextBase

そのためには、ScottHのMvcMockHelpersをご覧になることをお勧めします。その一部は少し古いですが、この特定のテストには十分だと思います。本当に必要なのは、FakeHttpContextメソッドとその依存関係だけです。そのライブラリを取得すると、コードは次のようになります。

[TestMethod]
public void Can_write_more_floorplans()
{
    const long productID = 12345;
    const int pageIndex = 10;

    var httpContext = FakeHttpContext();  // From the MvcMockHelpers
    var routeData = new RouteData();
    var requestContext = new RequestContext(httpContext, routeData);
    var urlHelper = new UrlHelper(requestContext);
    string floorplans = MoreFloorplans(urlHelper, productID, pageIndex);
    Assert.AreEqual(some_string, floorplans);
}

MvcContribプロジェクトを使用しようとしているとおっしゃっていますがTestHelper、私が知る限り、そのライブラリはすべてコントローラーのテストに関するものです。下位レベルのコンポーネントをテストするのに十分な粒度であるかどうかはわかりません。とにかく、そこにあるすべてのものは本当に必要ではありません。必要なのはRequestContext

于 2010-04-19T21:05:49.373 に答える