5

現在のソリューション

だから私は非常によく似たものを持っています

[HttpPost]
    public ActionResult Upload()
    {
        var length = Request.ContentLength;
        var bytes = new byte[length];

        if (Request.Files != null )
        {
            if (Request.Files.Count > 0)
            {
                var successJson1 = new {success = true};
                return Json(successJson1, "text/html");
            }
        }
...
        return Json(successJson2,"text/html");
    }

単体テスト可能なソリューション?

私はこのようなものが欲しい:

[HttpPost]
public ActionResult Upload(HttpRequestBase request)
{
    var length = request.ContentLength;
    var bytes = new byte[length];

    if (request.Files != null )
    {
        if (request.Files.Count > 0)
        {
            var successJson1 = new {success = true};
            return Json(successJson1);
        }
    }

    return Json(failJson1);
}

ただし、これは失敗します。これは、基本クラスからモックを作成して使用できるため、面倒です。

ノート

  • これはフォーム/アップロードを解析する良い方法ではないことを認識しており、ここで他のことが起こっていると言いたいです (つまり、このアップロードはフォームまたは xmlhttprequest である可能性があります - アクションはどちらかを知りません)。
  • 「リクエスト」ユニットをテスト可能にする他の方法も素晴らしいでしょう。
4

1 に答える 1

6

コントローラーには既にRequestプロパティがあります => アクション引数として渡す必要はありません。

[HttpPost]
public ActionResult Upload()
{
    var length = Request.ContentLength;
    var bytes = new byte[length];

    if (Request.Files != null)
    {
        if (Request.Files.Count > 0)
        {
            var successJson1 = new { success = true };
            return Json(successJson1);
        }
    }

    return Json(failJson1);
}

Requestこれで、単体テスト、より具体的には Request プロパティを持つ HttpContext をモックできます。

// arrange
var sut = new SomeController();
HttpContextBase httpContextMock = ... mock the HttpContext and more specifically the Request property which is used in the controller action
ControllerContext controllerContext = new ControllerContext(httpContextMock, new RouteData(), sut);
sut.ControllerContext = controllerContext;

// act
var actual = sut.Upload();

// assert
... assert that actual is JsonResult and that it contains the expected Data
于 2012-05-24T12:07:07.363 に答える