1

ドメインオブジェクトからJSONデータを取得しRequest.Form[0]、ドメインオブジェクトを呼び出すアクションがあります。

このメソッドをテストしていますが、Request.Formを設定することは不可能のようです。

メソッドを別のメソッドに抽出して、それが返す文字列を取得することもできますが、それは1行のメソッドであり、アクションはまだテストされていません。

$.ajax()これまたは別の、呼び出しからJSONデータを取得するためのよりテスト可能なメソッドをテストするメソッドはありますか?

4

2 に答える 2

2

個人的には、 MVCContrib TestHelperを使用して、コントローラーのアクションを単体テストします。それは物事をとても楽しく簡単にします。

したがって、次のコントローラーを想定している場合(免責事項:実際のアプリケーションでは絶対にこのようなものを記述しないでください。これは単なる例です。実際のアプリケーションでは、コントローラーのアクションはからRequest.Formのものをフェッチしてはならず、強く型付けされたアクションパラメーターを使用してそのままにしておく必要があります。デフォルトのモデルバインダーは解析などを行います...):

public class MyViewModel
{
    public string SomeProperty { get; set; }
}

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var json = Request.Form[0];
        var model = new JavaScriptSerializer().Deserialize<MyViewModel>(json);
        return View(model);
    }
}

次のようにテストできます。

// arrange
var builder = new TestControllerBuilder();
var sut = new HomeController();
builder.InitializeController(sut);
builder.Form.Add("foo", "{ someProperty: 'some value' }");

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

// assert
actual
    .AssertViewRendered()
    .WithViewData<MyViewModel>()
    .SomeProperty
    .ShouldEqual("some value", "");
于 2011-01-19T17:03:09.750 に答える
0

強く型付けstringされたパラメーターをパラメーターとして追加することにより、メソッドに書き込むことができます。

public JsonResult ActionName(string paramName)

そしてそれをデータに含める:

var dataVar = getDataVar();
$.ajax({
    url: '/Controller/ActionName'
    , type: 'post'
    , data: { paramName: dataVar }
    , dataType: 'json'

    , success: function (returnJSON) {
    }
    , error: function (XMLHttpRequest, textStatus, errorThrown) {
    //error handle in here
    }
});
于 2011-01-19T18:14:04.513 に答える